次のようなクラスがあったとします:
class X<T> {
val: T;
constructor(val: T) {
this.val = val;
}
}
このクラスを使ったコードを見てください:
const makeX = <T>(val: T): X<T> => new X(val);
const x = makeX('foo').val;
ここで、xの型はstringです。
場合によっては、これをstringではなく値そのものの型、'foo'にしたいときもあるかと思います。
TypeScriptではas constを使うと、値そのものの型を表現することができます。ただジェネリックに対してはas constを使えません。
どうするかというと、<T extends keyof any>のように書きます:
const makeX = <T extends keyof any>(val: T): X<T> => new X(val);
const x = makeX('foo').val;
こうすると、xの型は'foo'になります。めでたし
もっと良い方法があるよ!という方はお知らせください ![]()