TypeScript/非同期/Lesson 06
エラー処理 — catch の err は unknown。必ず絞り込んで使え
30分·theory
このチャプター
6/7
TypeScript
エラー処理 — catch の err は unknown。必ず絞り込んで使え
💡 なぜ学ぶ必要があるのか — キャッチしても終わりではない
🎯
JSの`catch`では`err`が`any`型のため、`.message`に何の確認もなくアクセスできます。TSは`unknown`を強制することで「本当にErrorかどうか」を確認させます。
💼
`throw`は何でも投げられます — Error、文字列、数値、オブジェクト。`catch`内で形状を決め打ちするのは危険です。
⚡
カスタムErrorクラス(ApiError、ValidationErrorなど)でエラーを分類することで、呼び出し元がそれぞれ異なる処理を行えます。
🔗
`try/finally`でリソースのクリーンアップ(ファイルのクローズ・ロックの解放)を保証します — エラーの有無にかかわらず実行されます。
🏢 실무에서는
APIコールの失敗には401/403/404/500それぞれ異なるUXが必要です。401 → ログインページへリダイレクト、403 → 権限の案内、404 → 空の状態を表示、500 → 一時的なエラーメッセージを表示。`catch`で`err.status === 401`のように分岐するには、エラーオブジェクトの型を知る必要があります — TypeScriptの`instanceof ApiError`がその安全な入り口です。
unknown の絞り込み · カスタム Error · try/finally
1. catch (err) の err は unknown (TS 4.4+)
2. 絞り込みの3パターン
3. カスタム Error クラス — エラーを分類する
呼び出し側では:
4. try/finally — クリーンアップは必ず実行される
💡 💡 TypeScript エラー処理の重要ポイント5選
1. catch の err は unknown — 絞り込め
2. カスタム Error はクラスで作り、name を必ず設定せよ
3. エラーの分類には instanceof を使えerr.code === 'XYZ' のような文字列比較はタイポや重複のリスクがある。クラスベースはコンパイル時に安全。
4. finally は必ず実行される — リソースのクリーンアップに使え
ファイルのクローズ・データベース接続の解放・ロックの解除などは finally で行う。
5. 空の catch は絶対に書くな
最低でも console.error(err) を入れること。さもなければ再スローする。
⚡ 実際に試してみよう — カスタム Error + instanceof
種類ごとにエラーを throw し、catch 内で分岐処理します。
✏️ JS 코드
📟 コンソール出力
▶ 実行ボタンを押してください
⚠️ ブラウザのサンドボックスで実行 — console.log()のみ対応、alert/fetchは不可
理解度チェッククイズ
TypeScript で `catch (err) { ... }` の `err` を最も安全に絞り込む方法は何ですか?
先に読むとよい概念: Fetch API — ジェネリックヘルパー fetchJson<T>
次のおすすめ: エラー処理の深化 — Result<T, E> パターン