2017-03-23 160 views
0

創建擴展通用的返回類型只是想知道,如果這樣的事情是可能的,如果有什麼是正確的語法:如何在打字稿

export interface IElement {...} 

export interface X { 
    one<T>(name: string, id: string): T extends IElement; 
    two<T>(name: string, id: string): Observable<T extends IElement>; 
    three<T>(name: string, id: string): Observable<Array<T extends IElement>>; 
} 

基本上我想返回具有所有屬性的對象消費者在方法調用中使用另一個接口的所有方法/道具指定的對象。

回答

0

交會類型

interface IElement { } 

interface X { 
    one<T>(name: string, id: string): T & IElement; 
    two<T>(name: string, id: string): Observable<T & IElement>; 
    three<T>(name: string, id: string): Observable<Array<T & IElement>>; 
} 
1

這是可能的。只要把extends約束的一般簽名裏面:

export interface IElement {} 

export interface X { 
    one<T extends IElement>(name: string, id: string): T; 
    two<T extends IElement>(name: string, id: string): Observable<T>; 
    three<T extends IElement>(name: string, id: string): Observable<Array<T>>; 
} 
+0

是不是說,T中的消費者傳遞到功能已經實現了IElement?我的意圖是添加IElement到T並返回它。 –

+0

對於這個約束,爲了有效T需要實現IElement接口。那不是你想要的嗎? – Diullei

+0

不能:給定對象X我想返回對象X +添加屬性/方法(IElement)並獲得它們的intellisense ...基本上我只想約束/定義返回類型 –