abcdefGets

ゲッツ!

Typescript 2.5 リリース

Typescript 2.5がでたので変更点をメモ

Optional-catch-bindingの導入

catch節のエラーオブジェクトが省略可能になった。
現在Stage3のOptional catch bindingが導入された形に。

サンプル

let input = "...";
try {
    JSON.parse(input);
}
catch {
    // ^ catch節の変数宣言を省略している。
    console.log("Invalid JSON given\n\n" + input)
}

jsにJSDocベースの型アサーションとキャストを導入

javascriptファイルもJSDocコメントで型チェック可能になった。
コメントで@ts-checkをつけるか、
コンパイラオプションでcheckJsオプションをtrueにすれば動作する。

型チェックの詳細は以下のWikiに書いてある。

Type Checking JavaScript Files · Microsoft/TypeScript Wiki · GitHub

重複したパッケージのリダイレクト

簡単に言うとnode_modulesのパッケージの同一性チェックをする。

つまり、moduleResolutionがnodeの場合node_modulesからモジュールをインポートするが、
その際にそのモジュールのpackage.jsonをチェックして、すでにインポートした事のあるモジュールかどうか確認する。
もし同一のモジュールであれば、すでにimport済みのモジュールにリダイレクトして同じモジュールをロードしない。
ちなみにpackage.jsonのversionとnameをチェックして同一性判定をする。

node_modules -
             |
             [A-package] -
             |          |
             |          node_modules -
             |                       |
             |                       [C-package]
             [B-package] -
                         |
                         node_modules -
                                      |
                                      [C-package]

この例だと、A-packageとB-packageが同じC-pacakgeを必要としているが、typescriptコンパイラは一度しかC-packageをインポートしない。
B-packageの必要とするC-pacakgeはA-packageのC-packageを参照する。

–preserveSymlinksコンパイラフラグの導入

–preserveSymlinksオプションが導入される。
このオプションはシンボリックリンクされたモジュールが他のモジュールをimportする場合に、
シンボリックリンク元のパスを起点とした相対パスではなく、
シンボリックリンクが置かれている場所からの相対パスとなる。

A -
  |
  B -
  |  |
  |  C'(Symblink of C)
  C

この例だと、C'モジュールのパス解決は–preserveSymlinksをセットしない場合は、
A/Cから始まることになる。
しかし–preserveSymlinksをセットすると、
A/B/C'からパス解決が行われる。

まとめ

意外と新機能は少なかったですね。