IT-Q

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

e instanceof Error で確かめてから e.message を読みます。strict に含まれる useUnknownInCatchVariables で catch の変数は unknown になります。Error 以外も投げられるからです。

面接官が見ているのはuseUnknownInCatchVariables の意味と、正しい直し方を知っているか。

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

  • e instanceof Error で確かめてから e.message を読む
    その通りです。投げられるのが Error とは限らないので、確かめてから使います。
  • catch (e: any) と書く
    エラーは消えますが、Error でない値が投げられたときに落ちます。確かめる方が安全です。
  • (e as Error).message と書く
    確かめていません。文字列が投げられたら message は undefined です。
  • tsconfig の strict を外す
    エラーは消えますが、strict の他の検査まで全部失います。

模範解答

e instanceof Error で確かめてから使います。

  catch (e) {
    if (e instanceof Error) {
      console.error(e.message)
    } else {
      console.error("想定外の値が投げられました", e)
    }
  }

TypeScript 4.4 で入った useUnknownInCatchVariables が有効だと、catch の変数は any ではなく unknown になります。strict に含まれているので、6.0 以降は既定で有効です。

unknown になるのは、JavaScript では Error 以外の値(文字列や数値)も投げられるからです。as Error と書いて黙らせると、文字列が投げられたときに message が undefined になります。

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

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。