如何使用typescript正确定义主干集合?

时间:2013-10-30 03:03:36

标签: javascript backbone.js typescript

我正在使用https://github.com/borisyankov/DefinitelyTyped/中的backbone.d.ts。

打字稿版本0.9.1

问题:我无法正确定义Backbone.Collection:

代码:

   /// <reference path='./backbone/backbone.d.ts'/>

   import Backbone = require("backbone");

   class User extends Backbone.Model {
        getName() : string {
        return "User Name";
        }
   }

   class Users extends Backbone.Collection {
        model = User;
   }

   var users = new Users();

   var firstUser = users.create({});
   console.log(firstUser.getName());

尝试编译:{{1​​}} 我收到了错误:

tsc ./users.ts -m amd

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以在此处使用泛型:http://blogs.msdn.com/b/typescript/archive/2013/03/25/working-on-typescript-0-9-generics-overload-on-constants-and-compiler-performance.aspx

可以使用泛型重写定义文件: https://gist.github.com/lavrton/7226521

然后,每次创建主干集时,都必须包含模型:

var users = new Backbone.Collection<User>();

或更好更清洁:

class Users extends Backbone.Collection<User> {
   model = User;
}
var users = new Users();

现在,typescript将为每个收集方法提供正确的模型类型。 你可以为Backbone.View做同样的事情。

Offtopic提示: 最好将模型属性写入原型:

class Users extends Backbone.Collection<User> {
}
Users.prototype.model = User;