Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeScript overridden member is not subtype of original member

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? );
} 
like image 558
Nassim Avatar asked Oct 22 '12 06:10

Nassim


1 Answers

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

like image 75
Boris Yankov Avatar answered Nov 15 '22 11:11

Boris Yankov