0

バックボーン 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();
    }
}

しかし、ジェネリックの使用は何ですか?! これはコンパイラの欠陥ですか?!

4

1 に答える 1