6章高度な型

TypeScriptは、偏屈なHaskellプログラマーでさえうらやむような、型レベルの強力なプログラミング機能をサポートする、ワールドクラスの型システムを備えています。もうご存知のように、その型システムは、驚くほど表現力が豊かなだけでなく、使うのが容易で、型の制約と関係を簡潔に宣言することを可能にすると同時に、ほとんどの場合、それらの推論を可能にします。

そのように表現力が豊かで、並外れた型システムが必要とされるのは、JavaScriptが非常に動的だからです。プロトタイプ、thisの動的バインド、関数のオーバーロード、絶えず変化するオブジェクトといったものをモデル化するには、機能が豊富な型システムと、バットマンが驚いて二度見するような型演算子のユーティリティベルト†1が必要です。

[†1] 訳注:バットマンが腰に巻く、さまざまなガジェットを携帯可能なベルト。

この章ではまず、TypeScriptでのサブタイプ、割り当て可能性、変性、型の拡大について詳しく取り上げ、これまでのいくつかの章にわたって育んできた洞察にさらに明確な定義を与えます。次に、型の絞り込みや完全性など、TypeScriptの制御フローベースの型チェック機能について解説し、いくつかの高度な型レベルのプログラミング機能——オブジェクト型に対するルックアップとマッピング、条件型の使用、独自の型ガードの定義、および型アサーションや明確な割り当てアサーションのようなエスケープハッチを紹介します。最後に、さらなる型安全性を得るための高度なパターン——コンパニオンオブジェクトパターン、タプル型についての推論の改善、名前的型のシミュレート、プロトタイプの安全な拡張——について説明します。

6.1 型の間の関係 ...

Get プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.