IT-Q

any と unknown は、どう違いますか。

どちらも何でも受け取れますが、unknown は絞り込むまで使えません。そのため any を unknown に置き換えると、使う側で確かめる処理が必要になり、一度に全部替えると数百か所で要求されます。

面接官が見ているのは補強。any を unknown に置き換える意味が分かっているか。

これは「参画したプロジェクトで、any が数百か所に使われていました。どう進めますか。」への追撃質問です。

よくある答えと、面談でどう見られるか

  • どちらも何でも入るが、unknown は型を絞り込むまで使えない
    その通りです。だから any を unknown に変えると、使う側で確かめる必要が出ます。
  • unknown は any の新しい名前で、違いは無い
    使うときの制限がまったく違います。unknown のままではプロパティも読めません。
  • unknown には null が入らない
    入ります。どんな値でも受け取れます。
  • unknown は実行時に型を確かめてくれる
    確かめません。確かめるコードを書くよう強制するだけです。

模範解答

どちらもあらゆる値を受け取れます。違いは、受け取ったあとに使えるかどうかです。

any は検査を止めるので、何をしてもエラーになりません。unknown は、typeof や instanceof などで型を絞り込むまで、プロパティを読むことも呼ぶこともできません。

そのため any を unknown に置き換えると、使っている側で確かめる処理を足す必要が出ます。一度に全部置き換えると、その確かめる処理が数百か所で一度に要求されることになります。

対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。