将接口扩展为字典

时间:2016-01-22 05:37:11

标签: typescript

我有一个角度资源接口,我想扩展它以从后端获取对象结构。它适用于除字典之外的任何接口类型:

export interface MyInterface extends angular.resource.IResource<any> {
  [key: string]: MyAnotherInterface;
}

Typescript编译器给出了一个错误,即找不到angular.resource.IResource的所有属性,因为据我所知,另一个声明[key: string]: MyAnotherInterface;会覆盖可扩展单元的所有属性。所以,据我所知,问题是字典声明非常严格,并且不允许同一界面上的其他属性。

我无法改变服务器返回的结构(仅仅因为TS而改变它是愚蠢的);同时我真的希望每次(<any>MyInterface).myProperty都避免写作 - 这真的很有气味。

TypeScript版本:1.7.5

如何解决问题?

1 个答案:

答案 0 :(得分:1)

  

所以,据我所知,问题是字典声明非常严格,并且不允许同一界面上的其他属性

是。您不能拥有string的字典索引,其中某些属性不符合常规结构(您的MyAnotherInterface)。

  

我无法改变服务器返回的结构(仅仅因为TS而改变它是愚蠢的);

您可以这样做:

export interface MyInterface extends angular.resource.IResource<any> {
  get(key:string): MyAnotherInterface;
}

然后将get函数简单地添加为(instance as any).get = (x:string)=>this[x];