Reactjs 使用typescript限制具有操作名称的有效负载类型

Reactjs 使用typescript限制具有操作名称的有效负载类型,reactjs,typescript,Reactjs,Typescript,我正在使用React的useReducer,我正在尝试使用typescript来实现当动作类型为“设置”时,动作负载必须是数组,而动作类型为“添加”,负载必须是对象 大概是这样的: type TItemsAction=tactionitemset&TActionItemsAdd; MSSET类型={ 类型:'集'; 有效负载:TItem[];//使用新数组更新整个项数组 }; 类型:MSADD={ 类型:“添加”; 有效负载:TItem;//向项数组添加一个新的项对象 }; 函数项还原程序(状态

我正在使用React的useReducer,我正在尝试使用typescript来实现当动作类型为“设置”时,动作负载必须是数组,而动作类型为“添加”,负载必须是对象

大概是这样的:

type TItemsAction=tactionitemset&TActionItemsAdd;
MSSET类型={
类型:'集';
有效负载:TItem[];//使用新数组更新整个项数组
};
类型:MSADD={
类型:“添加”;
有效负载:TItem;//向项数组添加一个新的项对象
};
函数项还原程序(状态:TItem[],操作:TItemsAction){
开关(动作类型){
案例“集合”:{
返回动作。有效载荷;
}
案例“添加”:{
返回[…状态、动作、有效载荷];
}
默认值:{
抛出新错误(`Unsupported action type:${action.type}`);
}
}
}
const[items,dispatch]=useReducer(itemsReducer,[]);
我收到打字稿抱怨: 交集“TitemAction”已减少为“never”,因为属性“type”在某些成分中具有冲突的类型


有什么办法可以做到这一点吗?

看起来似乎是一个或另一个,而不是同时两个

type TItemsAction = TActionItemsSet | TActionItemsAdd;

您是否愿意使用
type TItemsAction=tactionitemset | TActionItemsAdd?这可能会解决Typescript所抱怨的错误。是的,你需要的是一个并集,而不是一个交集。对了,现在我看到了一个多么愚蠢的问题。