型アサーション【type assertion】
概要

外部ライブラリから取得した値やJSONを解析したデータ、Webブラウザから取得した要素などは、コンパイラだけでは具体的な型を判断できないことがある。型アサーションを用いると、開発者が把握している型情報をコンパイラに直接伝えることができ、以後のコードで指定した型に応じたプロパティやメソッドを扱えるようになる。
型アサーションは型変換(キャスト)と混同されやすいが、型変換は実行時に値の内部表現を実際に書き換える処理であるのに対し、型アサーションはコンパイル時に型の解釈を指定する手法である。アサーションによって実行時にデータ変換が行われるわけではない。実行時の処理コストを増やすことなく、型情報の不一致によるコンパイルエラーを回避できる。
TypeScriptでは、値の後ろに「as 型名」と記述する方法と、値の前に「<型名>」を付ける「アングルブラケット構文」の2種類が用意されている。アングルブラケット構文はReactのJSX構文と混同されやすいため、現在はas構文が使われることが多い。なお、number型をstring型に直接アサートするなど、関連性のない型同士への変換はコンパイルエラーとして扱われる仕組みになっている。
型アサーションは型安全性を高める機能ではなく、開発者が型検査器に追加情報を与えるための機能である。指定した型が実際の値と一致しない場合でも、コンパイルは通ってしまうため、誤った型を指定すると実行時エラーや予期しない動作に繋がる恐れがある。そのため、値の型が確実に判明している場面に限定して使用することが望ましいとされ、型の絞り込みなど他の手段で対応できる場合はそちらが優先される。
型アサーションと似た機能に、変数宣言時に型を明示する「型アノテーション」(type annotation:型注釈)がある。アノテーションでは、指定した型に必要なプロパティが不足していたり、余分なプロパティが含まれていたりすると、コンパイラがエラーとして検出する。一方、型アサーションは推論された型情報を強制的に上書きするため、こうした不整合があってもエラーが検出されない場合がある。