2017-03-23 12 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>>; 
} 

は基本的に私はすべてのプロパティを持つオブジェクトを返すようにしたいですコンシューマがメソッド呼び出しで指定したオブジェクトの、別のインタフェースのすべてのメソッド/ propsを使用します。

答えて

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

Nope:与えられたオブジェクトXオブジェクトXを追加したいプロパティ/メソッド(IElement)を返し、intellisenseを取得したい...基本的には、戻り値の型を制約/定義したい –

関連する問題