联合类型的Typescript泛型:从其他属性中找出属性的类型
我有一个带有联合类型的Typescript泛型:从其他属性中找出属性的类型,typescript,generics,union-types,Typescript,Generics,Union Types,我有一个带有payload和type属性的联合类型,其中typeus uniq。当给定类型时,我想推断有效负载类型 typeaaaction={type:'A',负载:APayload}; 类型BAction={type:'B',有效负载:BPayload}; 类型APayload=编号; 类型BPayload=字符串; 类型动作=动作|动作; 常量操作:操作[]=[]; 类型PayloadOfType=???? 类型PayloadOfTypeA=类型PayloadOfType; 因此,目标是
payload
和type
属性的联合类型,其中type
us uniq。当给定类型时,我想推断有效负载类型
typeaaaction={type:'A',负载:APayload};
类型BAction={type:'B',有效负载:BPayload};
类型APayload=编号;
类型BPayload=字符串;
类型动作=动作|动作;
常量操作:操作[]=[];
类型PayloadOfType=????
类型PayloadOfTypeA=类型PayloadOfType;
因此,目标是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'>;
typeaaaction={type:'A',负载:APayload};
类型BAction={type:'B',有效负载:BPayload};
类型APayload=编号;
类型BPayload=字符串;
类型动作=动作|动作;
常量操作:操作[]=[];
类型PayloadOfType=Extract['payload']
类型PayloadOfTypeA=类型PayloadOfType;