TypeScript の as による型アサーションについて、正しい説明はどれですか?
解説
正解は 「コンパイラに対して『この値はこの型として扱ってほしい』と伝えるだけで、実行時には何もしない」です。as は 型アサーションと呼ばれ、開発者が「自分はこの値の型を知っている、コンパイラより詳しい」とTypeScriptに宣言する仕組みです。実行時のチェックも値の変換もしません。コンパイル後のJavaScriptからは as の記述自体が消えます。'123' as number のような型変換は行われませんし(そもそもこの書き方はコンパイルエラーになります)、実行時の型チェックも一切しません。型変換(キャスト)ではなく、型の上書き他の言語の「キャスト」と混同されがちですが、TypeScript の as は値そのものには一切手を触れません。あくまで「型システム上のラベルを貼り替える」だけです。たとえば次のコードは型エラーにならずコンパイルが通ります。const value: unknown = 'hello'; const num = value as number; console.log(num + 1); // 実行結果: 'hello1'型としては number として扱われていても、中身は文字列のまま。だから + 1 は文字列連結になってしまいます。asは嘘をつけるわけです。asを使うべき場面、使うべきでない場面asが本当に必要なのは、TypeScriptの型推論より開発者の方が確実に正しい情報を持っているときに限られます。代表例は次のような場面です。document.getElementById('canvas') as HTMLCanvasElement のように、DOM要素の具体的な型をTSが知り得ないときJSON.parse の戻り値(any)に、APIレスポンスの型を付けたいとき逆に、型エラーを黙らせるためだけに使うのは典型的なアンチパターンです。エラーが出たら、まず型ガード(typeof や in 演算子による絞り込み)で安全に型を絞れないか検討してください。「TypeScript as 使い方」で調べると安易な例が多くヒットしますが、実務では「asを使わずに済む書き方はないか?」と一度立ち止まるのがプロの感覚です。