2016-01-22 76 views
1

我有一个角度资源接口,我想扩展从后端获取对象结构。它的工作原理无处不在任何接口类型,除了字典:扩展接口为字典

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

打字稿编译器提供了从angular.resource.IResource所有属性无法找到一个错误,因为我了解这个另一声明[key: string]: MyAnotherInterface;覆盖扩展单元的所有属性。所以,据我了解,问题是字典声明是非常严格的,不允许在同一接口上的其他属性。

我不能改变服务器返回的结构(并且仅仅因为TS而改变它是愚蠢的)。与此同时,我真的希望避免每次写作(<any>MyInterface).myProperty - 这真的有味道。

打字稿版本:1.7.5

如何解决这个问题?

回答

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];

+0

感谢您的答复。 get函数应该添加到每个对象,对吧? – smnbbrv