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'からパス解決が行われる。
まとめ
意外と新機能は少なかったですね。