type assertion は、as を使ってコンパイラに「信じてください、この値は型 X です」と伝えます。これはランタイムでの変換やチェックを 一切行いません。コンパイラがその値をどう扱うかを変えるだけです。
ts
const el = .() ;
el. = ;
data = .(str) ;
type assertion は、as を使ってコンパイラに「信じてください、この値は型 X です」と伝えます。これはランタイムでの変換やチェックを 一切行いません。コンパイラがその値をどう扱うかを変えるだけです。
const el = .() ;
el. = ;
data = .(str) ;
assertion はコンパイラの判断を上書きします。もし間違っていれば、警告なしにランタイムでクラッシュします。
const x = "hello" as unknown as number; // double assertion — compiler stops complaining
x.toFixed(2); // 💥 runtime error: x.toFixed is not a function
assertion はその値を その型にする わけではありません。チェッカーを黙らせるだけです。正しさに対する責任をコンパイラから取り上げてしまっているのです。
// 1. type guard — actually verify at runtime
if (typeof input === "string") { /* input is string, proven */ }
// 2. validation library (zod) for external data
const user = UserSchema.parse(data); // throws if shape is wrong
as const は別物const point = { x: 1 } as const; // not a risky cast — narrows to literal/readonly
assertion は時に必要です(DOM API、すでにチェック済みの unknown の narrowing など)が、その 1 つ 1 つがコンパイラがあなたを守れない場所になります。
信頼できないデータには type guard やスキーマ検証を優先してください。そして、すべての as を、本当に確信を持てなければならない、小さく意図的な「私のほうがよく分かっている」という宣言として扱ってください。