Slide 1

Slide 1 text

TypeScript5.4の新機能                    村山陽亮

Slide 2

Slide 2 text

型の絞り込み 5.4以前 function getUrls(url: string | URL, names: string[]) { if (typeof url === "string") { url = new URL(url); } return names.map(name => { // if (typeof url === "string") return; url.searchParams.set("name", name); return url.toString(); }); } 関数クロージャ内で型情報が 保持されなかった 関数内でもう一度型情報 を絞り込む必要がなくなっ た

Slide 3

Slide 3 text

型の絞り込み 注意点 function printValueLater(value: string | undefined) { // ここで呼び出すことが可能 // toUpperCaseFn(); if (value === undefined) { value = "missing!"; } function toUpperCaseFn() { // エラーが発生する console.log(value.toUpperCase()); } // エラーは発生しない const toUpperCaseFn2 = () => console.log(value.toUpperCase()); } functionで関数宣言をした場 合、ホイスティングができるた め、型情報は保持されない

Slide 4

Slide 4 text

NoInfer ・5.4から新しく追加されたユーティリティ型 ・不要な型推論をブロックすることができる function createStreetLight(colors: C[], defaultColor?: C) { // ... } // blueはcolorsの配列に含まれていないのにエラーにならない createStreetLight(["red", "yellow", "green"], "blue"); // defaultColorからCが推論されるのを防ぐ function createStreetLight(colors: C[], defaultColor?: NoInfer) { // ... }

Slide 5

Slide 5 text

まとめ ・NoInfer→いまいち使い所が思いつかなかった… ・型の絞り込み→役立つが場面ができてきそうだと思った