Microsoft、プログラミング言語「TypeScript 4.0」を公開表現性、生産性、スケーラビリティが向上

Microsoftは、オープンソースのプログラミング言語の最新版「TypeScript 4.0」を公開した。多数の機能強化が行われ、パフォーマンスも向上している。

» 2020年08月28日 11時00分 公開
[@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 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を利用できるように一般的なパターンを変換する、新しいリファクタリングが可能になった。

(クリックで再生 出典:Microsoft

/** @deprecated */のサポート

 TypeScriptのエディタ支援機能は、宣言が「/** @deprecated */」というJSDocコメントでマークされていると、認識するようになった。VS Codeのようなエディタでは通常、非推奨となった値がこのように取り消し線で表示される。

(出典:Microsoft

起動時の部分的なセマンティックモード

 大規模プロジェクトなどで起動に時間がかかるというユーザーの声が多かったことを受け、部分的なセマンティックモードが導入された。このモードを選択すると、起動してから数秒で編集中のファイルが扱えるようになり、プロジェクト全体はバックグラウンドでロードされる。

 今のところ、このモードはVS CodeのInsiders版でのみサポートされている。

スマートな自動インポート

 エディタ支援機能において、ユーザーが「package.json」の「dependencies」(と「peerDependencies」)フィールドに指定したパッケージの情報が、自動インポート機能の向上のために使われるようになった。これにより、高いコストがかかる「node_modules」パッケージの完全な探索を行うことなく、型を持つ依存関係を全て自動インポートすることが可能になった。

新しいWebサイト

 TypeScript Webサイトが最近刷新されたことも紹介された。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。