TypeScriptチームはTypeScript 4.1のリリースを発表した。リリースには、強力なテンプレートリテラルタイプ、Mapped Typesのキーの再マッピング、再帰的な条件付きタイプが含まれる。
テンプレートリテラルタイプについては、コミュニティから非常に熱心な反応を得ている。この新機能により、通常の文字列リテラルタイプを他のタイプの定義として使用できるようになる。これによって、好みのテンプレート構文文法を簡単に作成して適用できるようになる。
テンプレート文字列リテラルは動的に生成され、テンプレート文字列内の置換位置から推測することもできる。テンプレート文字列リテラルの一般的な使用例をさらにサポートするために、TypeScriptには、Uppercase
、Lowercase
、Capitalize
、Uncapitalize
といった大文字と小文字を変更するための新しいユーティリティタイプエイリアスも追加された。
コミュニティは多くの興味深いテンプレート文字列リテラルの例を作成した。例えば、querySelector、ルーターパラメーター解析、式解析、JSON解析とシリアル化、GraphQL型付きAST、SQLクエリ検証、CSS解析、ゲーム、スペルチェックなどである。
HaskellとPureScriptには同様の機能があり、TypeScriptにサポートが追加されているのを見るのは素晴らしいことである。
TypeScript 4.1にキーの再マッピングの機能が追加されたことにより、Mapped Typesも改善されている。Mapped Typesは、以前は提供されたキーを持つ新しいオブジェクトタイプに制限されていた。Mapped Typesは、新しいキーの作成または既存のキーの除外をサポートするようになった。
TypeScript 4.1へのもう1つの重要な追加は、再帰的な条件型である。この追加により、配列や複雑なプロミスツリーでの新しいフラットメソッドなどの機能のサポートがより簡単になる。この追加をサポートするための変更は、条件型がブランチ内ですぐに自分自身を参照できるようになり、再帰型エイリアスの作成が容易になることである。TypeScriptチームは、再帰的な型チェックが遅くなるのを避けるために、このパターンは控えめに使用する必要があると警告している。再帰の深さがサポートレベルを超えると、TypeScriptコンパイラはコンパイル時エラーとなる。
TypeScript 4.1では、新しいコンパイラフラグとして--noUncheckedIndexedAccess
が追加されている。これは、未定義の可能性のあるプロパティキーの領域を特定するものである。この新機能は--strict
フラグで自動的に含まれることはない。その理由は、従来のforループのインデックスを繰り返し処理するなど、いくつかの一般的なシナリオにおいて動作を変更するためである。
React 17のユーザは、本番と開発のコンパイルをより適切にサポートする2つの新しいJSXオプションとして、react-jsx
とreact-jsxdev
を利用できる。
TypeScript 4.1の多くの改善により、アップグレード時に考慮すべきいくつかの重大な変更がある。
- 組み込みの
lib.d.ts
により、DOMタイプが自動的に生成される方法が変更されている。ES2016で廃止されたため、Reflect.enumerate
APIも削除されている。 - クラスの
abstract
メンバーは、async
としてマークされなくなった。呼び出し元は戻り値の型のみに関心があるため、抽象メンバーをasyncとして指定する値はない。 any
タイプとunknown
タイプは、偽として伝播されるようになった。resolve
のパラメータがpromiseで必要となった。TypeScript 4.1には、アップグレードを合理化するためのクイックフィックスがある。- 条件付きスプレッドは、オプションのプロパティを作成する。
- 一致しないパラメーターは関連しなくなった。
TypeScript 4.2に対する取り組みはすでに進行中であり、2021年2月に予定されている。TypeScript 4.2のリリース目標には、一般化されたインデックスシグネチャ、タプルタイプの先頭/中間の残りの要素、--noImplicitOverride
、--noPropertyAccessFromIndexSignature
、静的インデックスシグネチャ、typeof class
、反復されるコンパイル時間の短縮、エディターと生産性のさらなる改善が含まれる。
TypeScriptは、Apache2ライセンスの下で利用可能なオープンソースソフトウェアである。コントリビューションとフィードバックは、TypeScript GitHubプロジェクトを介して奨励されている。TypeScriptコントリビューションガイドラインとMicrosoftのオープンソース行動規範に従う必要がある。