BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 大規模プロジェクトのサポートが向上したTypeScript 3.0がリリース

大規模プロジェクトのサポートが向上したTypeScript 3.0がリリース

ブックマーク

原文(投稿日:2018/08/02)へのリンク

TypeScriptチームは先日TypeScriptのバージョン3.0を発表した。これには、プロジェクトの作成とスケールの新しいテクニック、パラメータリストの操作、明示的なチェックを強制するための新しい型、開発者のユーザーエクスペリエンスを改善するTypeScriptによるエラーレポートの処理が導入されている。

TypeScript 3.0は意図的に2.xからのアップグレードを容易にする目的で破壊的な変更を最小限にしている。アップグレード時に覚えておくべき破壊的変更は以下である:

  • unknownが新しい組み込み型に追加された。そのため、unknownという単語は予約済みの名前となり、型宣言できなくなった
  • 2年前に廃止予定としてマークされた内部メソッドLanguageService#getSourceFileが削除された
  • TypeChecker#getSymbolDisplayBuilder関数とその関連インターフェイスは、以前の廃止通知の後、削除された。これらはエミッタとノードビルダーに置き換えられるべきである
  • escapeIdentifier関数とunescapeIdentifier関数は、廃止予定にマークがされた後、削除された。
  • 次の関数はTypeScript内部メソッドが変更され、TypeScriptの公開APIではなくなった: TypeChecker#getSuggestionForNonexistentProperty, TypeChecker#getSuggestionForNonexistentSymbol,TypeChecker#getSuggestionForNonexistentModule

TypeScript 3.0の最も重要な変更点は、複数のTypeScript依存を管理している時に複雑さを軽減したプロジェクト参照である。プロジェクトはTypeScript構成ファイル(tsconfig.json)で参照できるが、他の構成ファイルを参照できるようになり、ソースコードツリーを小さなプロジェクトに分離してできるようになった。TypeScriptとそのツールは、プロジェクトの参照と、プロジェクトがビルドされて、構造化される順番を理解できるように更新された。

プロジェクト参照を改善によってもたらされる主な機能として、インクリメンタルビルディングと、プロジェクトをまたいだ編集とリファクタリングが含まれている。tsconfig.jsonにはプロジェクト参照をサポートするために2つの新しいフィールドが含まれている:

  • composite: プロジェクトが参照され、インクリメンタルにビルドされることを明示するブール値
  • references: ビルドの前に参照されたプロジェクトのビルドが必要だとTypeScriptが知るためのパスフィールドを含むオブジェクト

TypeScriptのインクリメンタル機能をサードパーティーツールが使用できるだけでなく、TypeScript 3.0は新しく、簡単なビルド操作をするための--buildフラグを含んでいる。

プロジェクトの出力構造に関するコントロールの強化は、新しいプロジェクト参照とビルドツールの別の利点である。典型的な使用例は、クライアントサイドとサーバーサイドアプリケーションの間で共有されるソースコードである。以前はこのコードは2回ビルドされていたが、プロジェクト参照により、共有された依存性は1回のみのビルドになった。

これは新しい機能なので、TypeScriptチームは他のツールの作成者が簡単にプロジェクト参照をサポートできることを期待している。TypeScriptプログラムマネージャーであるDaniel Rosenwasser氏によると「単一のtsconfig.jsonにより編集中のコードとプロジェクト参照がシームレスに感じられる」。TypeScriptチームは、プロジェクト参照とビルドの使い方のフィードバックを積極的に求めている。

TypeScriptプロジェクトは、末尾オプショナル要素(trailing optional elements)、Tupleの最後の要素を再構築、空のTuple型など、よりリッチなTuple型が追加されている。これらの拡張により、tuplesでパラメータリストを抽出、展開できるようになる。

以前のTypeScriptリリースの大きな問題点であった。複雑なオーバーロード定義の大幅な削減が利点である。TypeScriptチームが提示した例:

// TODO : 5 overloads should *probably* be enough for anybody?
function call<T1, T2, T3, T4, R>(fn: (param1: T1, param2: T2, param3: T3, param4: T4) => R, param1: T1, param2: T2, param3: T3, param4: T4): R
function call<T1, T2, T3, R>(fn: (param1: T1, param2: T2, param3: T3) => R, param1: T1, param2: T2, param3: T3): R
function call<T1, T2, R>(fn: (param1: T1, param2: T2) => R, param1: T1, param2: T2): R
function call<T1, R>(fn: (param1: T1) => R, param1: T1): R;
function call<R>(fn: () => R, param1: T1): R;
function call(fn: (...args: any[]) => any, ...args: any[]) {
    return fn(...args);
}

今は簡潔にできる:

function call(fn: (arg1: number, arg2: string) => string, arg1: number, arg2: string): string

エラーユーザーエクスペリエンスの改善として、エラーの可能性があるソースに追加コンテキストを提供するとともに、多くのわかりにくいエラーメッセージのエラーのソースをより明確に説明したエラーメッセージに更新された。

ReactのJSXのユーザーと他のvirtual DOM実装は、TypeScriptのJSX処理の改善(特にdefaultPropsのサポート)の利点を享受できる。

unknown型はany型の乱用に対する答えである。Rosenwasser氏によるとany型の課題は:

any型は全ての値を包含しますが、呼び出し、構築、これらの値のプロパティへのアクセス前にいかなるチェックもされません。またany型の値を他の期待するany型に割り当てることができます。これはほとんどの場合便利ですが、少し緩い可能性があります。

開発者がanyの値について説明したく、さらなる問題を防ぐためにチェックする必要があるシナリオの場合、unknown型を使うことが推奨される。anyとは違いunknown型は型のアサーションなしではほとんどなにも割り当てられない。

TypeScript 3.0にはさらにいくつかの改良と改善がある。

TypeScriptのコミュニティサポートと3.0リリースは成長しており、Angular, Dojo, Ionic, Stencil, Deno, Nest.jsといった著名なプロジェクトがTypeScriptに依存している。Ionic CEOであるMax Lynch氏は先日、TypeScriptを中心とした会社を構築するという記事を書いた:

Ionicが構築する全てのプロジェクトにおいて、全てのフロントエンドプロジェクトでTypeScriptを完全に使っています。

TypeScriptを始めるにはnpmを使ってインストールする:

npm install -g typescript

すでにTypeScript 3.1が進行中であり、JavaScriptのES2019の一部として期待され、ECMAScript提案のステージ3にあるBigIntがサポートされる予定だ。

TypeScriptはApache 2ライセンス下でオープンソースソフトウェアになっている。TypeScript GitHubプロジェクトを通じて貢献とフィードバックが可能だ。

Rate this Article

Adoption Stage
Style

この記事に星をつける

おすすめ度
スタイル

BT