Help us understand the problem. What is going on with this article?

結果に対する気づき

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パターンで案外うまく動いている気がする

herp
現場社員主導の採用活動である『スクラム採用』を実現する採用管理プラットフォーム「HERP ATS」を開発・運営しています。
https://herp.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away