0

https://github.com/borisyankov/DefinitelyTyped/のbackbone.d.ts を使用しています。

Typescript バージョン 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 に答える