MicrosoftがTypeScript 2.0をリリースした。型定義ファイル取得の簡略化、ヌル非許容型、Readonly
修飾子が含まれる。
TypeScriptのプログラムマネージャーであるDaniel Rosenwasserが語ったところによると、「ECMAScript仕様との密接な協力、JavaScriptライブラリーやツールの広範なサポート、主要なエディターのすべてに第一級のエディット体験をもたらすランゲージサポート機構」をもたらしたこのリリースについて、TypeScriptチームは「とても喜んでいる」とのことである。
TypeScript 2.0では開発者が型定義ファイルを入手・利用するのが容易になる。Rosenwasserも認めるところだが、今までは「型定義ファイルの入手方法や依存関係の管理を学ぶこと」が利用者にとって大きな苦痛だった。しかし2.0ではnpm install --save @types/lodash
というコマンドでスコープ指定された@types/lodash
パッケージをインストールすれば、開発者のプログラムでlodashをインポートした時にTypeScript 2.0は型定義を自動的に参照する。
2.0リリースのそのほかの新機能は、ヌル非許容型の導入である。TypeScriptはそもそもすべての型がヌルを許容するとして言語設計されていたが、実際にはnull/undefinedにまつわる問題の回避策を何も提供していなかったと言語チームも認めている。それと比べると今回のリリースでは、null
とundefined
には独自の型が付けられており、null/undefined
値を許容したい場所では開発者が明示的にそれを表現することが可能になっている。これは下記の動画(TypeScriptチームの転載許諾済)でデモを見ることができる。
TypeScript 2.0ではプロパティは読み取り専用として宣言できるようになり、setアクセサーのないgetアクセサーだけの宣言も読み取り専用とみなされるようになった。
class Person {
readonly name: string;
constructor(name: string) {
if (name.length < 1) {
throw new Error("Empty name!");
}
this.name = name;
}
}
// エラー! 'name' は読み取り専用。
new Person("Daniel").name = "Dan";
Microsoftのリリースに対するコミュニティの反応はおおむね好意的なものだった。HackerNewsでは、Ed Rochenskiが次のようにコメントした。
新機能のいくつかを早く私たちの実稼働アプリでも使いたい。Typescriptは私にとってJavaScript開発の架け橋だったし今もそうだ。個人的な意見だがJavaScriptは長い間壊れた言語だった。TypeScriptなしで私が同じようにやれたとは思えない。
Rosenwasserの投稿に、Allenというユーザーがコメント欄で質問した。「我々のコードベースではstrictNullChecksを使いたいと思うが、ライブラリー型定義のいくつかまたは全てではヌルチェックを緩める方向に戻すよう指示する方法はあるのか?」Allen氏にとっては、外部の型定義でstrictNullChecksを利用するには問題があったということである。使われているライブラリーの型定義が厳密にはヌル安全ではなかったためだ。
Rosenwasserは答えた。「現在のところ、strictNullChecksのためには依存する型定義に修正を加えなければならない。サードパーティ製の.d.tsファイルの多くはstrictNullChecksにかかわらず機能するが、もしそうでないものがあれば、DefinitelyTypedのtypes-2.0ブランチにプルリクエストを送ってもらえるとありがたい。」
TypeScriptのロードマップ上にある機能の中に、“ES2017の、オブジェクトのプロパティに対する残余/スプレッド”や、“関数式/アロー関数のデコレーター”、“nodeのregister拡張のサポート(訳注:10/1現在はロードマップから削除されている)”などがある。TypeScriptプロジェクトのGitHub上に置かれたTypeScript 1.8からの改善点と変更点の詳細はこちら。
TypeScriptはApacheライセンスでリリースされているオープンソースである。プロジェクトに貢献したいInfoQ読者はhttps://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.mdを一読のこと。
ヌル非許容型、タグ付き共用体、型定義ファイル取得の容易化は、私にとってこのリリースの最大の利益だ。