TypeScript:按属性从联合类型中条件提取

bvjxkvbb  于 2023-02-05  发布在  TypeScript
关注(0)|答案(1)|浏览(201)

我想缩小基于属性的类型,但不知道如何做到这一点。
举个小例子让它更明显:

type Message1 = { type: 'message1', payload: string }
type Message2 = { type: 'message2', payload: boolean }

type AnyMessage = Message1 | Message2;
type AnyMessageType = AnyMessage['type']

const listener = (type: AnyMessageType, callback: (payload: InferMessagePayloadByType) => any) => {
  // blabla
}

正如您在示例中所看到的,我想知道如何通过message.type(string)推断内部有效负载。

jutyujz0

jutyujz01#

我的错,刚刚意识到我可以使用交集从联合类型中提取。

const listener = <Type extends string>(type: Type, callback: (payload: Extract<AnyMessage, {type: Type}>) => any) => {
  // blabla
}

相关问题