使用Typescript在Backbone中定义集合的模型类型

时间:2013-06-17 13:26:08

标签: javascript backbone.js typescript

我正在尝试将Backbone与Typescript一起使用,而我并没有遵循Typescript的语法来定义集合将保留哪种类型的模型。

module Application.Collections {
    export class Library extends Backbone.Collection {
        model = Application.Models.Book; // THIS LINE DOESN'T WORK
        constructor(options?) {
            super(options);
        };
    }
}

module Application.Models {
    export class Bookextends Backbone.Model {
        constructor(options?) {
            super(options);
        }
    }
}

我得到的错误是:

Type of overridden member 'model' is not subtype of original
member defined by type 'Collection';

我还不清楚何时应该在构造函数中放置这样的定义,或者它是否重要。我试过了:

constructor(options?) {
        super(options);
        this.model = Application.Models.Entity;
};

其中说:

Cannot convert 'new(options?:any) => Models.Template' to 'Backbone.Model'

我真正要做的是定义一个具有一些实用方法的模型类型 - 当从服务器获取基本模型数据时,我希望模型初始化并根据服务器计算一些便利属性数据。但是这没有发生,因为collection.fetch()认为返回模型不是任何特定类型。

2 个答案:

答案 0 :(得分:2)

在“super(options);”

之前声明模型
    module Application.Models {
         export class Book extends Backbone.Model {
         constructor(options?) {
             super(options);
         }
    }    

    module Application.Collections {
        export class Library extends Backbone.Collection {

            constructor(options?) {
                this.model = Application.Models.Book;
                super(options);
            };
        }
    }

答案 1 :(得分:1)

如果要键入该变量,可以使用:

model: Application.Models.Book;

如果您想在运行时使用类名,可以使用字符串或this method of obtaining the class name at runtime

model = 'Application.Models.Book';

或者

model = Describer.getName(someObject);

第二种方法有一个限制,你只能获得类名,而不是完整路径。