0
我想更好地理解型inferance規則,我有一個絆倒了我一個人爲的例子:如何正確地分配相關類型的方法
的設置:
interface Model{
label?: string;
}
interface View<T>{
cid?: string;
model?: T;
}
class Foo {
findWithModel<TModel extends Model, TView extends View<TModel>>(value: TModel): TView;
findWithModel(value: string): any {
return {cid: "2"};
}
}
class AModel implements Model{
constructor(public label: string){}
}
class AView<T extends Model> implements View<T>{
cid = "1";
model = null;
}
let f = new Foo();
let model = new AModel("test");
所以我有過載,findWithModel
在一個情況下,它返回any
和其他應有效地將一個返回SomeView<SomeModel>
的問題就會出現,如下:
let trial1 = f.findWithModel<AView<AModel>, AModel>(model);
let trial2: AView<AModel> = f.findWithModel(model);
所以trial1
,工作,但顯然這是相當冗長的,爲什麼打擾的點。好像額外的工作來傳遞AModel
2X
所以我以爲,你知道,我就應該能夠提供對結果的聲明,trial2
類型信息,但打字稿則認爲,作爲:
Foo.findWithModel<AModel, {}>(value: AModel): {}
這顯然失敗:
Property 'cid' is missing in type '{}'
這甚至可能拉斷,而不過於冗長調用,我通過AModel
2x?
不夠公平!使用它我也可以將它轉換爲更具體的類型'let result => f.findWithModel(model);'也許更重要的是我不會丟失任何東西,它不能像我的例子中所示的那樣完成這次。謝謝。 –