TypeScriptチームはバージョン4.6ベータ版をリリースした。制御フロー分析、クラスコンストラクター定義、JavaScriptファイルのエラーチェックなどが改善されている。
TypeScriptでは、型が判別可能なUnion型である関数パラメーターのシグニチャーを絞り込むことができるようになった。これは、TypeScriptの型推論を改善し、オブジェクト型の推論を改善するためのもう1つのステップである。
次の関数が与えられたとする。
type Func = (args: ["a", number] | ["b", string]) => void;
const foo: Func = (param) => {
const [kind, payload] = param
if (kind === "a") {
payload.toFixed(); // 'payload' narrowed to 'number'
}
if (kind === "b") {
payload.toUpperCase(); // 'payload' narrowed to 'string'
}
}
上記の例では、「payload
」フィールドの値は「kind
」フィールドの値に基づいて絞り込まれる。これにより、関数内での決定木の作成がシンプルになる。
TypeScriptでは、JavaScriptファイルの構文エラーとバインディングエラーにもフラグを立てるようになった。新しいエラーの強調表示により、コンパイル時にJavaScriptファイルの多くのエラーを見つけて修正できる。
たとえば、同じスコープ内で変数を2つ宣言すると、エラーが発生する。
const myVar = "Hello";
const myVar = "World;
// error: Cannot redeclare block-scoped variable 'myVar'.
ファイルの先頭に// @ts-nocheck
を追加することで、JavaScriptファイル内でこのチェックを無効にできる。
TypeScript 4.6ベータ版では、super()
を呼び出す前に、コンストラクターの先頭にコードを追加することはエラーではなくなった。
TypeScriptプログラムマネージャーのDaniel Rosenwasser氏が、改善の背景にある主な理由を説明している。
TypeScriptでは、コンストラクターを含むクラスにプロパティ初期化子がある場合、コンストラクターの先頭にコードを含めることは以前はエラーでした。
これにより、これが参照される前にsuper()
が呼び出されたかを確認することが容易でしたが、この場合多くの有効なコードを拒否することになります。
新しいバージョンのリリースにより、このチェックはより寛容になり、「super()
」を呼び出す前に「this
」が使用されないようにしながら、クラスコンストラクターの先頭に他のコードを配置できるようになった。
TypeScript 4.6ベータ版では他にも改善点として、インデックス付きアクセス推論の改善、再帰深度チェックの改善、TypeScriptトレースアナライザーがある。
インデックスアクセス推論の改善により、マッピングされるオブジェクトタイプにインデックスを付けるアクセスタイプがTypeScriptによって正しく推論されるようになった。
より優れた再帰深度チェックのおかげで、TypeScriptはジェネリック型を無限に拡張することで引き起こされるエラーの特定が改善された。その結果、DefinitelyTypedのいくつかのライブラリのチェック時間が約50%以下に短縮された。
Trace Analyzerは、プロジェクト内の計算コストの高いタイプに関連する情報をよりわかりやすく表示するための新しいツールである。
TypeScript 4.6ベータ版に移行する際に考慮すべき、いくつかの重大な変更がある。まず、オブジェクトのREST式で、ジェネリックオブジェクトの拡散不可であるメンバーが削除されるようになった。また、このリリースでは、JavaScriptファイルの文法エラーとバインディングエラーが必ず報告されるようになった。
TypeScriptプログラミング言語は、Apache2ライセンスの下でライセンスされているオープンソースソフトウェアである。
GitHubのTypeScriptプロジェクトへの投稿とコメントは歓迎されている。その際、TypeScript投稿ガイドラインとMicrosoftオープンソースの行動規範に準拠している必要がある。