🌟
Typescriptでのエラー型の定義
はじめに。
typescriptにおいて、エラーのハンドリングのためにエラーをthrowしてしまうと、インターフェースからはエラーが発生する可能性を読み取れないという問題が提起されていました。
自分もこれを問題視しています。この問題に対して、Result型を定義することによりこの問題を回避していますので、なにかの参考になれば幸いです。
Result型の導入
以下を定義します。
Result.ts
export type Result<Success, Error> = Ok<Success> | Err<Error>;
export type Ok<Success> = {
data: Success;
type: "success";
};
export type Err<Error> = {
data: Error;
type: "err"
};
使い方
まず、Ok
とErr
を生成する関数を先に定義しておきます。
export const ok = <T>(data: T): Ok<T> => {
return {
data,
type: "success"
};
};
export const err = <T>(data: T): Err<T> => {
return {
data,
type: "err"
};
};
これらを用いた例が以下になります。(typescript4.6を使用しています。)
const result: Result<Success, Error> = someFunction();
const { data, type } = result;
if (type === "err") {
/**
* エラーのときの処理
* このときのdataはError型です。
*/
return
}
/**
* 正常なときの処理
* このときのdataはSuccess型です。
*/
Discussion