TypeScript 3.7の新機能

2019年10月18日
投稿者:若林 奨太
カテゴリ:TypeScript タグ:
TypeScript_Logo

TypeScript 3.7の新機能

TypeScriptは2019/10/18時点で3.7のベータを公開中です。
正式リリースはロードマップによれば11月とのことです。

今回はもうすぐリリースされる3.7の予習も兼ねて、新機能を紹介していきます。

この記事はAnnouncing TypeScript 3.7 Beta | TypeScriptを元に書いています。

なお、英語の成績が万年赤点だったため、おかしな意訳をしているかも知れません。
その場合はやさしく教えて下さい。

※社内向けでもあったりするので、弊社であまり使わなさそうな部分はさらっと流しています。

Optional Chaining

Optional Chainingがついに来ました。
以下のようなものです。

kotlinSwiftにはすでにあったりして、さっさとTypeScriptにも入れてくれ〜と思っていた機能がついに追加されます。
これは待ち望んでいた人も多いのでは。

Angularのテンプレート内では、とっくの昔にこのOptional Chainingが使えるのですが、TypeScriptでは使えないためムカついていたので喜ばしい限りです。

Nullish Coalescing

これも今どきの言語では導入されていますね。
以下のようなものです。

いままでは || を使って似たようなことをすることが多かったと思いますが、ご存知の通り以下のようなバグを生みがちです。

これを回避するためにも、3.7からは積極的にこのNull Coalescingを使用しましょう。

Assertion Functions

例外がスローされなければ、それ以降はある型として扱うものです。
とりあえず、コードを見てみましょう。

Type Guardと似てますが、Type Guardは返り値がtrueの場合、その型として扱うというものだったため、必ず条件式が必要になっていました。

このAssertion Functionsが導入されれば、実行時の引数型チェックがより簡素に記述できそうです。

Recursive Type Aliases

再帰的なType Aliasesの定義が可能になります。

複雑な型定義を書いたことがある人ならピンと来るかも知れませんが、3.6までは以下のようなJsonType Aliasesを定義したい場合、追加でJsonObjectJsonArrayというインターフェースも定義する必要がありました。

これが3.7からはこうなります。
コンパイラが型解決を少し遅延して(little bit “lazier”)、このパターンも許可されるようになりました。

ちなみに、当たり前ですが以下の再帰Type Aliasesはエラーになります。

Uncalled Function Checks

しょうもないミスとしてありがちな、メソッド呼び出しを忘れてif文に書いてしまうようなことを防いでくれる機能です。
以下のようなものですね。

これが3.7からはちゃんと怒ってくれるようになります。

@ts-nocheck in TypeScript Files

多用されると困りますが、今までJavaScriptファイルだけだった// @ts-nocheckをTypeScriptファイルでも使用できるようになりました。
TypeScriptファイルの先頭に// @ts-nocheckを追加すれば型チェックなどが無効になります。

Breaking Changes

DOM changes

lib.dom.d.tsが更新されました。
主にnull許容に関連する変更らしいですが、Breaking Changesとなっているので、もしかしたら影響があるかも知れません。

Function Truthy Checks

Uncalled Function Checksでも説明した通り、ifでメソッドが呼び出されていない場合、TypeScriptでエラーが発生するようになりました。

Local and imported Type Declarations Now Conflict

これまでは以下のように、インポートした型定義と同一名称の型定義を定義できていましたが、これはどうやらバグだったらしく、今後はこのようなケースはTypeScriptでエラーを吐くようになります。(バグだったの??)

もしなんらかの意図を持って名前を重複させていた場合は修正が必要になります。

その他

他にも以下のアップデートがあります。
弊社ではあまり使い所がなさそうなので一覧だけ紹介します。

  • 返り値neverの関数のサポート改善 (Better Support for never-Returning Functions
  • JavaScriptソースコードが混在する場合の.d.ts生成 (–declaration and –allowJs)
  • プロジェクト参照によるビルドフリー編集 (Build-Free Editing with Project References)
  • 末尾のセミコロンが必須ではない場所でのセミコロン挿入・削除サポート (Semicolon Formatter Option)

参考

Announcing TypeScript 3.7 Beta | TypeScript


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です