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);'也许更重要的是我不会丢失任何东西,它不能像我的例子中所示的那样完成这次。谢谢。 –