Microsoft、プログラミング言語「TypeScript 4.0」を公開:表現性、生産性、スケーラビリティが向上
Microsoftは、オープンソースのプログラミング言語の最新版「TypeScript 4.0」を公開した。多数の機能強化が行われ、パフォーマンスも向上している。
Microsoftは2020年8月20日(米国時間)、オープンソースのプログラミング言語の最新版「TypeScript 4.0」を公開した。表現性、生産性、スケーラビリティを強化した次世代TypeScriptとうたっている。
TypeScriptは、静的型付けができる言語で、JavaScriptのスーパーセットだ。ECMA規格に従った最新のJavaScriptの機能を、古いWebブラウザやランタイムが扱えるようにコンパイルすることもできる。
TypeScript 4.0は、2018年7月に公開されたTypeScript 3.0以来のメジャーリリース。Microsoftは、npmでTypeScriptの月間ダウンロード数が2020年7月に初めて5000万を超えたことや、開発者向けQ&Aサイト「Stack Overflow」による2020年の年次開発者調査において、最も愛されている言語のランキングでTypeScriptが2位を占めたことを引き合いに出し(首位はRust)、TypeScriptの普及が進んでいることを強調した。
TypeScript 4.0は、NuGetを使うか、次のコマンドラインのように、npmを使ってインストールできる。
npm install -D typescript
TypeScript 4.0は「Visual Studio 2019」「Visual Studio 2017」のエディタでサポートされており、「Visual Studio Code」(以下、VS Code)でも利用できる。TypeScript 4.0の主な特徴は次の通り。
可変タプル型
操作対象の実際の型が分からなくても、タプルと配列の高次操作を表現できるようになった。
また、次のように、残りの要素をタプルの最後だけでなく、タプル内のどこにでも発生させることが可能になった。
type Strings = [string, string]; type Numbers = [number, number]; // [string, string, number, number, boolean] type StrStrNumNumBool = [...Strings, ...Numbers, boolean];
ラベル付きタプル要素
タプル型がラベルを提供できるようになった。
type Range = [start: number, end: number];
パラメーターリストとタプル型のつながりを深めるため、残りの要素およびオプション要素の構文は、パラメーターリストの構文を反映したものになる。
type Foo = [first: number, second?: string, ...rest: any[]];
ラベル付きタプルは、タプルと引数リストのパターンを利用するとともに、型安全な方法でオーバーロードを実装するときに便利だ。
コンストラクタからのクラスプロパティの推論
「noImplicitAny」が有効な場合に、制御フロー分析によってクラスのプロパティの型を決定できるようになった。
class Square { // Previously: implicit any! // Now: inferred to `number`! area; sideLength; constructor(sideLength: number) { this.sideLength = sideLength; this.area = sideLength ** 2; } }
代入演算子「&&=」「||=」「??=」
新たにECMAScriptの3つの代入演算子「&&=」「||=」「??=」をサポートした。
これらの代入演算子は、次のようなコードを書くときに代わりに使える。
a = a && b; a = a || b; a = a ?? b;
また、次のようなifブロックを書くときにも使える。
// could be 'a ||= b' if (!a) { a = b; }
catch句の変数の型としてunknownを指定可能
catch句の変数の型として、「any」の代わりに「unknown」を指定できるようになった。unknownはanyよりも安全だ。値を操作する前に、何らかの型チェックを行う必要があることを思い出させるからだ。
try { // ... } catch (e: unknown) { // error! // Property 'toUpperCase' does not exist on type 'unknown'. console.log(e.toUpperCase()); if (typeof e === "string") { // works! // We've narrowed 'e' down to the type 'string'. console.log(e.toUpperCase()); } }
カスタムJSXファクトリ
新しい「jsxFragmentFactory」オプションを使ってフラグメントファクトリをカスタマイズできるようになった。
例えば、次の「tsconfig.json」ファイルはTypeScriptに、Reactと互換性を持つようにJSXを変換するよう指示しているが、各ファクトリ呼び出しを「React.createElement」ではなく「h」に切り替え、「React.Fragment」の代わりに「Fragment」を使用する。
{ "compilerOptions": { "target": "esnext", "module": "commonjs", "jsx": "react", "jsxFactory": "h", "jsxFragmentFactory": "Fragment" } }
「--noEmitOnError」使用時における「build」モードのスピード向上
これまでは、「--noEmitOnError」フラグを使う場合、コンパイルエラーになった後でプログラムを「--incremental」でコンパイルすると、極めて低速になっていた。前回のコンパイルの情報が、「--noEmitOnError」フラグに基づいて「.tsbuildinfo」ファイルにキャッシュされていなかったからだ。
TypeScript 4.0では、このシナリオで大幅にスピードが向上し、「--build」モードシナリオ(--incrementalと--noEmitOnErrorの両方を含む)も改善された。
「--incremental」コンパイル時の「--noEmit」フラグの使用
--incrementalコンパイル時に「--noEmit」フラグを使用できるようになった。これは従来、不可能だった。--incrementalが.tsbuildinfoファイルを出力する必要があるからだ。だが、高速な差分ビルドを実現するユースケースが重要なことから、全てのユーザー向けにこうしたフラグ使用が可能になった。
オプショナルチェイニングへの変換
オプショナルチェイニングやnullish coalescingを利用できるように一般的なパターンを変換する、新しいリファクタリングが可能になった。
/** @deprecated */のサポート
TypeScriptのエディタ支援機能は、宣言が「/** @deprecated */」というJSDocコメントでマークされていると、認識するようになった。VS Codeのようなエディタでは通常、非推奨となった値がこのように取り消し線で表示される。
起動時の部分的なセマンティックモード
大規模プロジェクトなどで起動に時間がかかるというユーザーの声が多かったことを受け、部分的なセマンティックモードが導入された。このモードを選択すると、起動してから数秒で編集中のファイルが扱えるようになり、プロジェクト全体はバックグラウンドでロードされる。
今のところ、このモードはVS CodeのInsiders版でのみサポートされている。
スマートな自動インポート
エディタ支援機能において、ユーザーが「package.json」の「dependencies」(と「peerDependencies」)フィールドに指定したパッケージの情報が、自動インポート機能の向上のために使われるようになった。これにより、高いコストがかかる「node_modules」パッケージの完全な探索を行うことなく、型を持つ依存関係を全て自動インポートすることが可能になった。
新しいWebサイト
TypeScript Webサイトが最近刷新されたことも紹介された。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
Microsoft、プログラミング言語「TypeScript 3.9」を公開
Microsoftは、オープンソースのプログラミング言語の最新版「TypeScript 3.9」を公開した。コンパイラの高速化やエディタ機能の強化、コーディング支援などの改良が行われている。Microsoft、プログラミング言語「TypeScript 3.8」のβ版を公開
Microsoftは「TypeScript 3.8」のβ版を公開した。TypeScript 3.8は、ECMAScript規格の新機能や強化機能に加え、型のみのインポート/エクスポートのための新構文など、多くの新機能を提供する。利用者調査「State of JavaScript」最新版が公開、2万人強が参加
JavaScriptの利用動向に関する年次調査(2019年版)が発表された。開発者2万1717人の回答を集計、分析したものだ。勢いのあるフレームワークやツール、JavaScriptのスーパーセット言語が分かる。