エラーの型付け(unknown)、catchでの絞り込み
catchパラメーターをunknownとして型付けし、instanceof/typeofやカスタムガードで絞り込んで安全にエラー処理します
「エラーの型付け(unknown)、catchでの絞り込み」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全3レッスンが含まれています。
はじめに
目標: エラーをunknownとして捕捉し、安全に型を絞り込みます。instanceof、typeof、カスタム型ガードを使って、予期せぬ問題なくエラー情報を読み取ります。
unknownとinstanceof
まずunknownとして扱います。instanceof Errorで型を絞り込むと、messageやstackなどにアクセスできます。
async function boom(): Promise<void> { throw new Error("boom") }
async function run() {
try {
await boom();
} catch (e: unknown) {
if (e instanceof Error) {
console.error("Handled:", e.message);
} else {
console.error("Non-Error thrown:", e);
}
}
}
run();プリミティブにはtypeof
コードによっては文字列やその他のプリミティブがスローされます。typeofで型を絞り込み、適切に処理します。
function throwString() { throw "bad" }
try {
throwString();
} catch (e: unknown) {
if (typeof e === "string") {
console.warn("string error:", e.toUpperCase());
} else {
console.warn("other error", e);
}
}カスタムガード
さまざまな層から来る「エラーのような」形を認識するユーザー定義の型ガードを作成します。
type ErrorLike = { message: string; code?: string };
function isErrorLike(e: unknown): e is ErrorLike {
return !!e && typeof e === "object" && "message" in e;
}
try {
throw { message: "oops", code: "E_BAD" };
} catch (e: unknown) {
if (isErrorLike(e)) {
console.error(e.message, e.code ?? "no-code");
} else {
console.error("unknown error", e);
}
}安全なログ出力
エラー処理を一元化します。小さなヘルパーで型を絞り込んで安全にログを出力し、ログ出力自体でクラッシュしないようにします。
function logErrorSafe(e: unknown): void {
if (e instanceof Error) {
console.error("Error:", e.message);
} else if (typeof e === "string") {
console.error("Error(string):", e);
} else {
try {
console.error("Error(obj):", JSON.stringify(e));
} catch {
console.error("Error(unknown)");
}
}
}
try { throw { oops: true } } catch (e: unknown) { logErrorSafe(e) }ヒント
ヒント:
- catchではunknownを優先します。
instanceof、typeof、またはガードで型を絞り込みます。Errorだと決めつけないでください。サードパーティのコードは何でもスローする可能性があります。
エラーの型付けの確認
簡単な確認: catchではなぜunknownを優先するのでしょうか?
まとめ
まとめ: エラーはunknownとして捕捉し、instanceof/typeofまたはカスタムガードで型を絞り込み、安全なログ出力を一元化します。
よくある質問
「エラーの型付け(unknown)、catchでの絞り込み」レッスンは無料ですか?
はい。「エラーの型付け(unknown)、catchでの絞り込み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全3レッスンが含まれています。
「エラーの型付け(unknown)、catchでの絞り込み」で何を学びますか?
catchパラメーターをunknownとして型付けし、instanceof/typeofやカスタムガードで絞り込んで安全にエラー処理します ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「エラーの型付け(unknown)、catchでの絞り込み」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Promise とasync/awaitの型付け
- エラーの型付け(unknown)、catchでの絞り込み
- 並行処理パターン(all/settled/race)の型