2017-04-23 23 views
0

ジェネリック型なしでジェネリック型にアクセスできるようにしたいですか?Typescript - ジェネリック要素を含まないパラメータとしてジェネリック型を使用できますか?

私は、例えば

interface GenIntf<T1, T2> { 
    someGenFunct(param: P1): T2; 
} 

、汎用的なインタフェースを持っていると私は、その仕事、それはプロキシのsomeGenFunctを作成することですファクトリクラスがある場合:だからここに私はしたくない

class ProxyFactory { 
    create(genIntf: GenIntf): any { 
    return new Proxy(genIntf.someGenFunct, {}); 
    } 
} 

をGenIntf​​のジェネリック型について何か知りたいときは、GenIntf​​の実装が提供されていることを確認したいだけです。しかし、これを変更しない限り、これは失敗します。

create<A, B>(genIntf: GenIntf<A, B>) { 

しかし、これは抽象的な作業が難しくなります。

+1

現在、リリース候補( 'npm i typescript @ 2.3')では、' interface GenInft someGenFunct(param:P1):T2;}のようなデフォルトを指定できます。 '。 –

答えて

0

あなただけの型引数にanyタイプを使用することができます。

class ProxyFactory { 
    create(genIntf: GenIntf<any, any>): any { 
    return new Proxy(genIntf.someGenFunct, {}); 
    } 
} 

追記を:おそらくany戻り値の型をしたくない、彼らは、戻り値を使用しないようにするために避けなければならないので、間違って質問のコードからそのままコピーして残しました。全体的に


しかし、それはあなたが質問で提案されているものを行うために、おそらく最善です:TS 2.3+

class ProxyFactory { 
    create<A, B>(genIntf: GenIntf<A, B>) { 
    return new Proxy(genIntf.someGenFunct, {}); 
    } 
} 

const genIntf = ...; 
const proxyFactory = new ProxyFactory(); 
const proxy = proxyFactory.create(genIntf); 

デフォルトの型引数は、デフォルトの型引数を使用して検討するかもしれません。

interface GenIntf<T1 = any, T2 = any> { 
    someGenFunct(param: T1): T2; 
} 

しかし、これはインターフェイス自体に影響します。これはあなたが望むものではないかもしれません。

+0

doh ...そんなに単純ではないと思ってたよ!どうもありがとう! – Brian

+0

私は入れようとし続けましたか?代わりにコンパイラが文句を言う – Brian

+0

型引数として 'any'を理解することはできますが、それらは' {} 'でなければならず、戻り値型の注釈は完全に間違っています。 -1 –

関連する問題