IT-Q

useUnknownInCatchVariables が有効だと、何が変わりますか。

catch の変数の型が any から unknown に変わり、確かめるまで使えなくなります。TypeScript 4.4 で追加され、strict に含まれます。実行時の挙動は何も変わりません。

面接官が見ているのは補強。catch の変数の型が any から unknown になることを知っているか。

これは「catch (e) の中で e.message と書いたら、「e は unknown 型です」とエラーになりました。どう直しますか。」への追撃質問です。

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

  • catch の変数の型が any ではなく unknown になり、確かめるまで使えなくなる
    その通りです。4.4 で入り、strict に含まれています。
  • catch で例外が握りつぶされなくなる
    実行時の挙動は変わりません。変わるのは catch の変数の型だけです。
  • Error 以外の値を投げるとコンパイルエラーになる
    投げる側は制限されません。受け取る側で確かめるよう求めるだけです。
  • すべての関数に throws の型注釈が必要になる
    TypeScript には投げる例外の型を宣言する仕組みはありません。

模範解答

catch の変数の型が、any から unknown に変わります。TypeScript 4.4 で追加され、strict に含まれています。

unknown になると、e.message のように直接使うことはできず、instanceof Error などで確かめてから使う必要があります。JavaScript では Error 以外の値も投げられるので、こちらが実態に合った型です。

実行時の挙動は何も変わりません。

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