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