我有一个包含函数store.add(a:any)的Ext JS的TS定义文件(它有很多重载,所以我想这是为了简化d.ts文件)。我想传递一个实现Person接口的文字对象:
interface Person
{
name: string;
age: number
}
store.add(<Person>{ name: "Sam" });
这给了我intellisense,但遗憾的是它只是将文字强制转换为Person,而没有检测到缺失的字段。这可以按我的意思运作:
var p : Person = { name: "Sam" }; // detects a missing field
store.add(p);
但如果没有单独的变量,有没有办法做到这一点?
我意识到这将通过'固定'定义文件解决,但我认为许多Javascript库有太多的重载来允许这个。我几乎需要一种动态重载函数定义的方法..!仿制药会帮助吗?
答案 0 :(得分:3)
是的,仿制药似乎就是答案。在定义文件中更改:
add?( model:any ): Ext.data.IModel[];
到
add?<T>( model:T ): Ext.data.IModel[];
允许您拨打
store.add<Person>({ name: "sam" });
它正确显示错误!