TypeScriptでResult型を書く
例外は型に現れない。失敗しうる関数の戻り値を Result で表すと、呼び出し側に処理を強制できる。
定義
type Result<T, E = Error> = { ok: true; value: T } | { ok: false; error: E }
const ok = <T>(value: T): Result<T, never> => ({ ok: true, value })
const err = <E>(error: E): Result<never, E> => ({ ok: false, error })
使う
function parseAge(input: string): Result<number, string> {
const n = Number(input)
if (!Number.isInteger(n) || n < 0) return err(`不正な年齢: ${input}`)
return ok(n)
}
const result = parseAge("42")
if (result.ok) {
console.log(result.value + 1) // number として扱える
} else {
console.error(result.error)
}
長い行
横スクロールの確認用。
const veryLongLine = [
"alpha",
"beta",
"gamma",
"delta",
"epsilon",
"zeta",
"eta",
"theta",
"iota",
"kappa",
"lambda",
"mu",
]
.map((s) => s.toUpperCase())
.join(", ")
シェルも:
pnpm validate && pnpm build