Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
联合类型的Typescript泛型:从其他属性中找出属性的类型_Typescript_Generics_Union Types - Fatal编程技术网

联合类型的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;