🐈
個人的TypeScriipt 5.5 まとめ
TypeScript 5.5がアナウンスされました。
個人的にマイナーの割にビックニュースが多かったのでまとめました
Type Predicatesの推論
5.5からはガード関数の戻り値が type predicates として推論されるようになりました
// function isBirdReal(bird: Bird | undefined): bird is Bird
function isBirdReal(bird: Bird | undefined) {
return bird !== undefined;
}
これによってfilterのようなメソッドで type predicates を明示的に書かなくても配列の型が推論によって絞られるようになりました
Before
const birds: (Bird | undefined)[] = [...]
birds.filter(bird => bird !== undefined) // (Bird | undefined)[]
birds.filter((bird): bird is Bird => bird !== undefined); // Bird[]
After
const birds: (Bird | undefined)[] = [...]
birds.filter(bird => bird !== undefined) // Bird[]
オブジェクトのインデックスアクセスのガードが推論可能に
function f1(obj: Record<string, unknown>, key: string) {
if (typeof obj[key] === "string") {
// Now okay, previously was error
obj[key].toUpperCase();
}
}
Setクラスのメソッドが追加される
ESの proposal-set-methods で提案されているunionやintersectionのようなメソッドをサポート
具体的には以下
union
intersection
difference
symmetricDifference
isSubsetOf
isSupersetOf
isDisjointFrom
Isolated Declarations
背景が壮大すぎるので以下参照
undefinedを型の命名に使えなくなる
意図せずバグで export type undefined =
が宣言できてしまっていた模様
export type undefined = ''
この宣言が組み込みの undefined
を上書きすることはないが。namespaceや import * as ns from "..."
などとした時は宣言した型になる模様
これがちゃんと宣言したタイミングでエラーになるように治りました。
Discussion