Open4

タグ付きユニオンから型を抽出するユーティリティ型を作る

ken7253ken7253
nap5nap5

Extractを使ってもいいのかもと思い、少しデモを作ってみました。

type EndpointFoo = {
  endpoint: "/api/foo/",
  data: {
    userName: string,
    userId: string,
  }
}

type EndpointBar = {
  endpoint: "/api/bar/",
  data: {
    totalPost: number | bigint,
    post: string[],
  }
}

type EndpointBuzz = {
  endpoint: "/api/buzz/",
  data: {
    orgName: string,
    isPurchase: boolean,
  }
}

type TaggedUnion = EndpointBar | EndpointFoo | EndpointBuzz;

type Tag = TaggedUnion['endpoint'];

type ExtractTaggedType<T extends Tag> = Extract<TaggedUnion, { endpoint: T }>;

type FooType = ExtractTaggedType<'/api/foo/'>;

demo code.

https://codesandbox.io/p/sandbox/objective-easley-3d4hq5?file=%2Fsrc%2Findex.ts%3A1%2C1-32%2C1

簡単ですが、以上です。

ken7253ken7253

おっありがとうございます👀
参考にさせていただきます🙏