Edited at

結果に対する気づき

More than 1 year has passed since last update.


Result

export type Success<T> = {

ok: true,
result: T,
}

export type Failure<E> = {
ok: false,
error: E,
}

export type Result<T, E> =
| Success<T>
| Failure<E>

今までこのようなResult型はよく使われてきたと思うが(個人の主観です)

Constructor関数として考えられるのが以下がある


A

export function Success<T, E>(t: T): Result<T, E> {

return {
ok: true,
result: t
}
}


B

export function Success<T>(t: T): Success<T> {

return {
ok: true,
result: t
}
}

Aパターンのデメリットとして無駄に型パラメータのEを気にする必要がある

Bパターンは、まぁだいたいBパターンを使うことになるのだが、返り値がSuccess型になっていることぐらい

今回ふと気づいたのが


C


export function Success<T>(t: T): Result<T, never> {
return {
ok: true,
result: t
}
}

このCパターンで案外うまく動いている気がする