型定義でジェネリクスの型変数Tを使いつつ、インスタンス化する前のTそのもの1を定義するときのTIPS。
以前の記事で型クエリと組み合わせられたらなあ(typeof T
)と書いていた。
同様に思う人は多かったらしく、いつの間にかTypeScriptの公式WIKIのFAQにやり方が書いてあった。
オブジェクトリテラル型の 型表現で {new ():T}
とすればよい らしい。
function create<T>(ctor: { new(): T }) {
return new ctor();
}
var c = create(MyClass); // c: MyClass
出典:Why can't I write typeof T, new T, or instanceof T in my generic function?
厳密にやるなら次のissueに紹介されていた方法もある。
/** Generic class type. */
type Constructor<T> = { new (...args: any[]): T } | ((...args: any[]) => T) | Function;
-
何と呼べばいいのか。 ↩