2016-01-22 139 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