どちらも 任意の 値を保持できますが、安全性 が異なります。any は型チェックをオフにし、unknown はチェックをオンに保ったまま、使用する前に narrowing を強制します。
ts
: = ;
a..;
();
: = ;
u.();
();
どちらも 任意の 値を保持できますが、安全性 が異なります。any は型チェックをオフにし、unknown はチェックをオンに保ったまま、使用する前に narrowing を強制します。
: = ;
a..;
();
: = ;
u.();
();
function handle(input: unknown) {
if (typeof input === "string") {
input.toUpperCase(); // ✅ inside the guard, TS knows it's a string
}
}
unknown は any の型安全な対応物 です。あらゆる値を unknown に代入できますが、type guard でその正体を証明するまでは、その値に対して何もできません。
unknown — 境界において本当に型が不明な値に対して使います。JSON.parse の結果、API レスポンス、catch (e: unknown) など。これは検証を強制します。any — JS を移行する際や、本当に何かに型を付けられない場合の脱出ハッチです。控えめに使ってください。これは静かに伝播し、安全性を無効化します。any に手を伸ばすことは、TypeScript の目的を台無しにします。
型のない境界では unknown を優先してください。これはコンパイラの保証を維持しつつ任意の入力を受け入れ、データを信頼する前に検証するよう促します。