2016-05-30 15 views
1

any型パラメータを持つ別の関数を呼び出す汎用関数を作成しようとしています。これは私が試したものです:汎用型パラメータをパラメータとして使用する

static GetInstance<T>(): T { 
     return <T>injector.get(T); // get(param: any): any 
    } 

問題はこれはコンパイルされません。私はCannot find name 'T'エラーが発生しています。

私はget(typeof T)を試しましたが、タイプTは文字列"function"です。

どうすればよいですか?

説明のために:get()メソッドは型を受け入れます。たとえば、次のように使用できます。

import { MyService } from '..' 

constructor(){ 
    let val = this.injector.get(MyService); 
} 
+1

値として型を使用することはできません。型を渡す必要がある場合は、次のようにします。 'get ()' –

+1

_get()メソッドは型を受け入れるかどうかわかりません:Typescriptインターフェイスではなく、コンパイルするTypescriptクラスですオブジェクト。 – pietro909

+0

@ pietro909:クラスが実際に関数であると思うとき、get()が関数をパラメータとして受け入れると言うことができます。 get()は、指定された型をパラメータとして辞書コレクション内のキー値を検索します。 – dstr

答えて

1

Typescriptのジェネリックはデザイン時のみです。 JSの代わりに決して歓迎されることはありません。しかし、あなたがしようとしているのは、実際にはjavscriptでコンパイルすることを期待しているジェネリックスを使用することです。

つまり、Tは存在しません。それはあなたのためだけに増強されています。変数ではないので、変数として渡すことはできません。私が言ったように、それは完全に想像上のものです。

したがって、GetInstanceメソッドは、関数を実際の値で呼び出す必要があり、存在しないためTではありません。

関連する問題