BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース TypeScript 3.2はメタプログラミングサポートを改善し、BigIntを追加

TypeScript 3.2はメタプログラミングサポートを改善し、BigIntを追加

ブックマーク

原文(投稿日:2018/11/29)へのリンク

TypeScriptチームは、TypeScriptのバージョン3.2をリリースし、さまざまなメタプログラミングパターンのサポート、ジェネリック型に対するオブジェクトのスプレッドとレストを改善した。このリリースには、このステージ3 ECMAScriptの提案をサポートする環境に対するBigIntサポートも含まれている。

TypeScript 3.2では、さまざまな種類の完全サポートに向けた重要な要素の1つである、bind, call, applyの厳密な型チェックが追加されている。TypeScriptプログラムマネージャのDaniel Rosenwasserは、これらの追加の型チェックの重要性を説明している。

JavaScriptでは、bind、call、applyは、バインドして部分的に引数を適用できるようにし、異なる値で関数を呼び出せるようにし、引数として配列を使用して関数を呼び出せるようにする関数のメソッドです。

TypeScriptはこれまで厳密にこれらの関数をチェックすることができず、bind、call、およびapplyのそれぞれは任意の数の引数を受け入れて任意の型を返すように使われていた。以前からある2つの機能で、bind、call、applyの正確性を高めるために必要な抽象化をサポートしている。

  • thisパラメータ型(TypeScript 2.0)
  • タプル型を使ったパラメータリストのモデリング(TypeScript 3.0)

TypeScript 3.2リリースは新しいフラグstrictBindCallApplyを導入している。これはbind, call, applyに対してより厳密なバージョンの署名を宣言するための2つに新しいグローバル型を追加している。

  • CallableFunction - 呼び出し可能なオブジェクトのメソッド
  • NewableFunction - 新規作成可能だが呼び出し不可能なオブジェクトのメソッド

TypeScriptチームは、この機能が洗練されたメタプログラミング、またはクラスインスタンス内のバインディングメソッドのような単純なパターンを使用するときに、バグを見つけるのに役立つと期待している。

ES2015から広く普及している2つの機能であるオブジェクトのスプレッドとレストは、ほとんどのTypeScriptでサポートされているが、このリリースまではジェネリック型に対して使用できなかった。

スプレッドの場合、TypeScriptはジェネリック型から戻り型を表現する方法がないため、未知の2つの型を新しいものに表現するためのメカニズムはなかった。 TypeScript 3.2では、ジェネリックに対してオブジェクトのスプレッドが利用可能になり、インターセクションタイプを使用してこの機能をモデル化する。

オブジェクトレストの場合、いくつかの追加/上書きされたプロパティを持つ新しいオブジェクトを作成する代わりに、レストはいくつかの指定されたプロパティを欠く新しいオブジェクトを作成する。しかし、多くのアイデアを繰り返し考えた結果、TypeScriptチームは、既存のPickおよびExcludeヘルパー型がジェネリック型に対してオブジェクトレストを実行する機能を提供することに気づいた。

BigIntのサポートはほぼ完成しており、ES2019規格の一部となることが期待されている。 BigIntsは任意の大きさの整数の扱いを可能にする。 TypeScript 3.2は、BigIntsの型チェックを追加し、TypeScript esnextターゲットを介してBigIntをサポートする環境用のBigIntリテラルを発行する。

BigIntsは数学演算子に対して異なる動作をするため、TypeScriptチームはBigIntをサポートしないで環境に対して下位レベルのサポートをすぐに提供する予定はない。今日、これはBigIntサポートがNode.js 11+、Chrome 67+、および同様のバージョンのChromiumをベースにしたブラウザでのみ機能することを意味する。 FirefoxSafariEdgeはすべてBigIntの実装に取り組んでいると報告している。

TypeScript 3.2のその他の改良点は次のとおりである。

  • 和集合判別式における非ユニット型の許可
  • JavaScriptでのObject.definePropertyプロパティ割り当てのサポート
  • --showConfigを使用して暗黙の設定オブジェクトのコンソールへの印刷をサポート
  • リストと連鎖呼び出しのフォーマットとインデントを改善
  • dts-genを使ってローカルの@typesパッケージのスキャフォールディング
  • 仲介するunknown型のアサーションの追加
  • 省略されたnewキーワードを追加

TypeScript 3.2リリースにおけるこれらおよびその他の変更の詳細については、TypeScriptロードマップを確認してください。

TypeScript 3.3に対してすでに作業が開始されている。Partial型引数推論が最初に計画されている機能である。この変更により、_は型推論が行われる場所のプレースホルダーとして型引数リストに現れるようになり、ユーザはデフォルトのリスト内の変数を明示的に指定せずにデフォルトでオーバーライドさせたり、別の変数から推論させることができる。

TypeScript 3.3で導入される可能性があるTypeScriptロードマップのもう1つの主な機能は、ESデコレータの提案に対する最近の変更に対する整合である。

TypeScriptは、Apache 2ライセンスの下で利用可能なオープンソースソフトウェアである。コントリビューションとフィードバックはTypeScript GitHubプロジェクトを通して奨励されており、その際はTypeScriptコントリビューションガイドラインマイクロソフトのオープンソース行動規範に従ってください。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT