0Pricing
TypeScript Academy · レッスン

エラーの型付け(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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Promise とasync/awaitの型付け
  2. エラーの型付け(unknown)、catchでの絞り込み
  3. 並行処理パターン(all/settled/race)の型
← TypeScript Academyに戻る