I'm working on a testing application using TypeScript and BackboneJS. It's mainly an employees directory. When trying 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 Model and Collection definition.
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'm also using some definitions for interfacing 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's 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's 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's extend functionality
routes;
constructor (options? );
route(route, name, callback? );
navigate(fragment, options? );
}
The 'url' field is declared as a method, but it can be a method or a property.
Change it from
url();
to
url;
Or download the definitions (that just I updated) from here: https://github.com/borisyankov/DefinitelyTyped/blob/master/Definitions/backbone-0.9.d.ts
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With