Open1
TypeScriptで例外クラスの定義をサボりながら静的に判別可能なエラーを返す
import type { Result, ResultAsync } from 'neverthrow';
import { err, errAsync } from 'neverthrow';
interface PubErrProps<C extends string, E = never> {
/**
* エラーを一意に識別するエラーコード。ユーザーにも公開する。
*/
code: C;
/**
* ユーザーに表示するエラーメッセージ。
*/
message: string;
/**
* エラーの原因となるオブジェクト。不用意にユーザーに公開してはならない。
*/
cause?: E;
}
export class PubErr<C extends string, E = never> extends Error {
code: C;
cause!: E;
constructor({ code, message, cause }: PubErrProps<C, E>) {
super(message, { cause });
this.code = code;
}
}
export function pubErr<C extends string, T = never, E = never>(
content: PubErrProps<C, E>,
): Result<T, PubErr<C, E>> {
return err(new PubErr(content));
}
export function pubErrAsync<C extends string, T = never, E = never>(
content: PubErrProps<C, E>,
): ResultAsync<T, PubErr<C, E>> {
return errAsync(new PubErr(content));
}