0

我正在使用来自https://github.com/borisyankov/DefinitelyTyped/的主干.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());

试图编译:tsc ./users.ts -m amd 我得到了错误:

error TS2094: The property 'getName' does not exist on value of type 'Backbone.Model'.

如何解决这个问题呢?

4

1 回答 1

1

您可以在这里使用泛型:http: //blogs.msdn.com/b/typescript/archive/2013/03/25/working-on-typescript-0-9-generics-overload-on-constants-and-compiler-性能.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 做同样的事情。

题外话提示:最好将模型属性写入原型:

class Users extends Backbone.Collection<User> {
}
Users.prototype.model = User;
于 2013-10-30T03:03:36.187 回答