在TypeScript中键入文字对象

时间:2013-09-01 09:20:31

标签: extjs typescript

我有一个包含函数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库有太多的重载来允许这个。我几乎需要一种动态重载函数定义的方法..!仿制药会帮助吗?

1 个答案:

答案 0 :(得分:3)

是的,仿制药似乎就是答案。在定义文件中更改:

add?( model:any ): Ext.data.IModel[];

add?<T>( model:T ): Ext.data.IModel[];

允许您拨打

store.add<Person>({ name: "sam" });

它正确显示错误!