私はBaseApi
のサブクラスインスタンスを返すためのファクトリのような関数を持っています。これは、現在、このような何か(関係ない部分をトリミング)になります。`typeof T 'でのジェネリック型引数の使用
function getApi<T extends BaseApi>(apiClass: typeof BaseApi): T {
return new apiClass();
}
をそして私はこのようにそれを使用します。
const someApi = getApi<SomeApi>(SomeApi);
これは動作しますが、私は<SomeApi>
は事実によって推測されたいですSomeApi
コンストラクタを渡しています。<SomeApi>
を省略した場合、someApi
はBaseApi
ではないと推測され、SomeApi
ではありません。さらに悪いことに、<T extends BaseApi>
とtypeof BaseApi
の間にはコンパイラの相関関係は全くないので、コンパイルエラーなしで間違ってgetApi<SecondApi>(FirstApi)
のようなことをすることができます。
だから私はtypeof T
としてapiClass
を定義しようとした:
function getApi<T extends BaseApi>(apiClass: typeof T): T {
return new apiClass();
}
そして、私はTSがT
のこの使用法を理解していなかったことがわかりました。これを行う方法はありますか?
それくぎ付け、おかげでライアン! (あなたは文字どおり速く答えたので、まだ受け入れられません) – Aaron
https://www.typescriptlang.org/docs/handbook/generics.html#using-class-types-in-generics –