バックボーン typescript 定義でジェネリックを使用しようとしています。次のコードが機能しないのはなぜですか?! 遊び場で試してみてください。
declare module Backbone {
class Model{}
interface ViewOptions<TModel extends Model> {
model?: TModel;
}
class View<TModel extends Model> {
constructor(options?: ViewOptions<TModel>);
model: TModel;
}
}
class MyModel extends Backbone.Model {
}
class MyView extends Backbone.View<MyModel> {
}
// Error: Could not select overload for 'new'' expression.
var myView = new MyView({ model: new MyModel(), num: 1 });
// In typescript playground when you hover on 'model' in
// previous line it correctly shows its type as 'MyModel'
var model = myView.model; // expected to be of type MyModel
アップデート:
のコンストラクターを明示的に設定すると、コンパイラーが合格すると考えましたMyView
。
class MyView extends Backbone.View<MyModel> {
constructor(options?: Backbone.ViewOptions<MyModel>) {
super();
}
}
しかし、ジェネリックの使用は何ですか?! これはコンパイラの欠陥ですか?!