IT-Q

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
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。