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
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
一部しか触れられなかった場合
useUnknownInCatchVariables が有効だと、何が変わりますか。