I am working on a test application using TypeScript and BackboneJS. This is mainly a directory of employees. When I try to define a collection, I get the following error.
Type of overridden member 'url' is not subtype of original member defined by type 'Collection'
Here is my definition of model and collection.
class Employee extends Backbone.Model { reports: EmployeeCollection; constructor (options? ) { super(options); this.reports = new EmployeeCollection(); this.reports.url = '../api/employees/' + this.id + '/reports'; } } class EmployeeCollection extends Backbone.Collection { url: string = "../api/employees"; model = Employee; findByName(key) {} }
I also use some definitions to pair Backbone with TypeScript, and here is the file I'm using.
export class Model { static extend(properties: any, classProperties?: any): any; // do not use, prefer TypeScript extend functionality constructor (attributes?: any, options?: any); get(attributeName: string): any; set(attributeName: string, value: any): void; set(obj: any): void; escape(attribute); has(attribute); unset(attribute, options? ); clear(options? ); id: any; idAttribute: any; cid; attributes; changed; bind(ev: string, f: Function, ctx?: any): void; /// ???? // defaults; defaults(); toJSON(): string; fetch(options? ); save(attributes? , options? ): void; destroy(options? ): void; validate(attributes); isValid(); url(); urlRoot(); parse(response); clone(); isNew(); change(); hasChanged(attribute? ); changedAttributes(attributes? ); previous(attribute); previousAttributes(); } export class Collection { static extend(properties: any, classProperties?: any): any; // do not use, prefer TypeScript extend functionality model; constructor (models? , options? ); models; toJSON(): any; ///// start UNDERSCORE 28: bind(ev: string, f: Function, ctx?: any): void; collection: Model; create(attrs, opts? ): Collection; each(f: (elem: any) => void ): void; last(): any; last(n: number): any[]; filter(f: (elem: any) => any): Collection; without(...values: any[]): Collection; // Underscore bindings each(object: any, iterator: (value, key, list? ) => void , context?: any): any[]; forEach(object: any, iterator: (value, key, list? ) => void , context?: any): any[]; map(object: any, iterator: (value, key, list? ) => void , context?: any): any[]; reduce(list: any[], iterator: any, memo: (memo: any, element: any, index: number, list: any[]) => any, context?: any): any[]; reduceRight(list: any[], iterator: (memo: any, element: any, index: number, list: any[]) => any, memo: any, context?: any): any[]; find(list: any[], iterator: any, context?: any): any; // ??? detect(list: any[], iterator: any, context?: any): any; // ??? filter(list: any[], iterator: any, context?: any): any[]; select(list: any[], iterator: any, context?: any): any[]; reject(list: any[], iterator: any, context?: any): any[]; every(list: any[], iterator: any, context?: any): bool; all(list: any[], iterator: any, context?: any): bool; any(list: any[], iterator?: any, context?: any): bool; some(list: any[], iterator?: any, context?: any): bool; contains(list: any, value: any): bool; contains(list: any[], value: any): bool; include(list: any, value: any): bool; include(list: any[], value: any): bool; invoke(list: any[], methodName: string, arguments: any[]): any; invoke(object: any, methodName: string, ...arguments: any[]): any; max(list: any[], iterator?: any, context?: any): any; min(list: any[], iterator?: any, context?: any): any; sortBy(list: any[], iterator?: any, context?: any): any; sortedIndex(list: any[], valueL: any, iterator?: any): number; toArray(list: any): any[]; size(list: any): number; first(array: any[], n?: number): any; initial(array: any[], n?: number): any[]; rest(array: any[], n?: number): any[]; last(array: any[], n?: number): any; without(array: any[], ...values: any[]): any[]; indexOf(array: any[], value: any, isSorted?: bool): number; shuffle(list: any[]): any[]; lastIndexOf(array: any[], value: any, fromIndex?: number): number; isEmpty(object: any): bool; groupBy(list: any[], iterator: any): any; add(models, options? ); remove(models, options? ); get(id); getByCid(cid); at(index: number); push(model, options? ); pop(options? ); unshift(model, options? ); shift(options? ); length: number; //comparator; sort(options? ); pluck(attribute); where(attributes); url(); parse(response); fetch(options?: any): void; reset(models, options? ); create(attributes, options? ); } export class Router { static extend(properties: any, classProperties?: any): any; // do not use, prefer TypeScript extend functionality routes; constructor (options? ); route(route, name, callback? ); navigate(fragment, options? ); }