2

我有一个包含函数 store.add(a : any) 的 Ext JS 的 TS 定义文件(它有很多重载,所以我想这是为了简化 d.ts 文件)。我想向它传递一个实现 Person 接口的文字对象:

interface Person
{
  name: string;
  age: number
}

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

这给了我智能,但不幸的是,它只是将文字强制转换为 Person,而没有检测到缺失的字段。这可以按我的意愿工作:

var p : Person = { name: "Sam" }; // detects a missing field
store.add(p);

但是有没有办法在没有单独变量的情况下做到这一点?

我意识到这可以通过“固定”定义文件来解决,但我认为许多 Javascript 库有太多的重载,不允许这样做。我几乎需要一种动态重载函数定义的方法..!泛型在这里有帮助吗?

4

1 回答 1

3

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

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

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

允许您调用

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

它正确显示错误!

于 2013-09-01T09:34:22.400 回答