従来までは、TypeScript で関数の引数の型を絞り込んだ結果を返す場合には、ユーザー定義型ガードとして x is string
のような形式で型ガードを定義する必要がありました。TypeScript 5.5 では自動で型の絞り込みが推論されるようになります。
例えば、引数の型を string
として絞り込む関数を定義する場合、次のように書く必要がありました。
function isString(x: string | number): x is string {
return typeof x === "string";
}
TypeScript 5.5 からは次のように書けます。
function isString(x: string | number) {
return typeof x === "string";
}
これはよく話題に上がっていた、filter
を使ったときに型が絞り込まれない問題に対する解決策としても期待されています。
const values = ["foo", "bar", null, "baz"];
// ^? (string | null)[]
const definedValues = values.filter(x => x !== null);
// ^? (string)[]