在Typescript中正确打开减速器样式的有效负载

在Typescript中正确打开减速器样式的有效负载,typescript,Typescript,我目前有两种类型的数据,GenArtWorkerMsg和VehicleWorkerMsg。我也有一个搜索器,它获取这些数据集的一部分,但我无法让搜索器了解传递了哪个数据集,尽管有效负载上有一个唯一的类型属性 如何强制它区分不同的有效载荷 GenArtWorkerMsg类型={ 额外:“名称”|“描述”; 数据:LoadTableReturn['2']; 类型:“车辆组”; }; 类型车辆工时RMSG={ 额外:“carName”|“carGroup”; 数据:LoadTableReturn['

我目前有两种类型的数据,
GenArtWorkerMsg
VehicleWorkerMsg
。我也有一个搜索器,它获取这些数据集的一部分,但我无法让搜索器了解传递了哪个数据集,尽管有效负载上有一个唯一的
类型
属性

如何强制它区分不同的有效载荷

GenArtWorkerMsg类型={
额外:“名称”|“描述”;
数据:LoadTableReturn['2'];
类型:“车辆组”;
};
类型车辆工时RMSG={
额外:“carName”|“carGroup”;
数据:LoadTableReturn['3'];
类型:“genericArticles”;
};
类型SearchActions={
一般物品:GENARTWORKSG;
车辆组:VehicleWorkerMsg;
};
类型SearchType={
术语标识:编号;
lang_ID:编号[];
dataOwner:SearchActions[type]['data'][number];
额外:SearchActions[type]['extra'];
类型:类型;
uuid:字符串;
翻译?:翻译[];
};
交易类型={
类型:“completedSearch”;
有效载荷:搜索型;
}
const messageHandler=(操作:事务)=>{
const{uuid,dataOwner,translations,extra,type}=action.payload;
开关(动作.有效载荷.类型){
案例“一般物品”:
{
//有效载荷为GENARTWORKSG |车辆工作RMSG,尽管只有
//GenArtWorkerMsg数据的类型为“genericArticles”
基本上,您需要将联合从泛型参数“提升”一级到类型定义本身。只有在最高级别,而不是嵌套在泛型参数中,TypeScript才能真正缩小联合

因此,您需要执行以下操作:

type TransAction = {
    type: 'completedSearch';
    payload: SearchType<'genericArticles'> | SearchType<'vehicleGroups'>;
}
类型事务={
类型:“completedSearch”;
有效载荷:SearchType | SearchType;
}

有效载荷:SearchType | SearchType;
@iz_uuu谢谢,完全错过了!如果你把它放在答案中,我会将它标记为已解决:)
type TransAction = {
    type: 'completedSearch';
    payload: SearchType<'genericArticles'> | SearchType<'vehicleGroups'>;
}