2017-03-23 120 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 ...基本上我只想约束/定义返回类型 –