💡
TypeScript で Go の多値返却エラーハンドリングっぽく使える Result 型を考えた
初投稿です。
作った Result 型
次のような型エイリアスで表現する。
type Result<T, E> = [T, undefined] | [undefined, E];
説明
Go 言語では、次のような多値返却を利用したエラーハンドリングがよく行われる。
res, err := somefunc();
if err != nil {
// エラーハンドリング
} else {
// `res` を使う
}
TypeScript で冒頭の Result
型を用いると
// 正常時の値を `int` で、エラーを `string` で返す関数
function somefunc(success: boolean): Result<int, string> {
if (success) {
return [42, undefined]; // 正常
} else {
return [undefined, "error"]; // エラー
}
}
const [res, err] = somefunc(true);
if (err !== undefined) {
// エラーハンドリング
// `err` の型は `string` に確定される
} else {
// `res` を使う
// 嬉しいことに、 `res` の型は `int` に確定される
}
として、型推論をうまく効かせながら Go 言語っぽく書けそう。
Discussion