联合类型的打字稿通用:从其他属性中查找属性类型



我具有带有payloadtype属性的联合类型,从中 type US UNIQ。我想在给出type时推断有效载荷类型。

type AAction = {type: 'A', payload: APayload};
type BAction = {type: 'B', payload: BPayload};
type APayload = number;
type BPayload = string;
type Actions = AAction | BAction;
const actions: Actions[] = [];
type PayloadOfType<T extends Actions['type']> = ????
type PayloadOfTypeA = PayloadOfType<'A'>;

因此,目标是PayloadOfTypeA等于APayload(或number(。

这是可能的吗?

您可以使用条件类型Extract

type AAction = {type: 'A', payload: APayload};
type BAction = {type: 'B', payload: BPayload};
type APayload = number;
type BPayload = string;
type Actions = AAction | BAction;
const actions: Actions[] = [];
type PayloadOfType<T extends Actions['type']> = Extract<Actions, { type: T }>['payload']
type PayloadOfTypeA = PayloadOfType<'A'>;

最新更新