TL;DR
TypeScript が知りえない型の情報をプログラマが与え、値の型を指定すること。値 as 型 と書く。実行時のチェックはない。
なぜ必要か
TypeScript のハンドブックによると、値の型について、TypeScript が知りえない情報をプログラマが知っていることがある。典型的な例は DOM 要素で、document.getElementById の戻り値は HTMLElement だが、それが HTMLCanvasElement だと分かっていれば型アサーションで指定できる。
仕組み
型アサーションは型アノテーションと同じくコンパイル時に取り除かれ、実行時の振る舞いには影響しない。そのため、アサーションが間違っていても、例外や null は生じない。<HTMLCanvasElement>値 という山括弧の書き方もあるが、.tsx ファイルでは使えない。
TypeScript は、より具体的な型か、より一般的な型への変換だけを許す。"hello" as number のような「ありえない」変換はエラーになる。どうしても必要なら、unknown か any を経由して expr as unknown as T と 2 回アサーションする。
例
const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement注意点
Effective TypeScript 第2版 ―型システムの力を最大限に引き出す83項目 によると、型アノテーションは値が型に適合するかをチェックするが、型アサーションはチェックしない。const bob = {} as Person は、必要なプロパティがなくてもエラーにならず、余剰プロパティチェックも行われない。そのため、型アサーションより型アノテーションを使い、型アサーションを使うときはなぜ必要かをコメントに書く。型アサーションは any などと並んで、型システムの不健全さ(健全性の破れ)を生むパターンの 1 つである。