any と unknown は、どちらも「何でも入る型」です。何が違いますか。
どちらも何でも入りますが、any は型の検査を止め、unknown は型を絞り込むまで使えません。外から来る値は unknown で受けて、typeof などで確かめてから使うのが安全です。
面接官が見ているのは型の安全性を「入るか」ではなく「使えるか」で考えられるか。
よくある答えと、面談でどう見られるか
- unknown は、型を絞り込むまでプロパティを読んだり呼び出したりできない
その通りです。any は検査そのものを止め、unknown は「確かめてから使え」と言います。 - 違いは無い。unknown は any の新しい名前
入る値は同じでも、使うときの制限がまったく違います。 - unknown には null と undefined が入らない
入ります。unknown はどんな値でも受け取れます。 - any は実行時に型を確かめ、unknown は確かめない
どちらもコンパイル時だけの話です。型は実行時には残りません。
模範解答
どちらもあらゆる値を受け取れますが、受け取ったあとの扱いが違います。
any は型の検査を止めます。プロパティを読んでも、関数として呼んでもエラーになりません。間違っていても、実行して初めて落ちます。
unknown は「何が入っているか分からない」という意味で、そのままでは何もできません。typeof や instanceof などで型を絞り込んでから使うことを強制されます。
外から来る値(JSON.parse の結果や、型の付いていないライブラリの戻り値)を受けるときは、any ではなく unknown で受けて、確かめてから使うのが安全です。面談では「any を使う理由を説明できるか」を見られます。
出典(一次資料)
対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。