Typescript MobX状态树:Union中操作参数的类型

Typescript MobX状态树:Union中操作参数的类型,typescript,mobx-state-tree,Typescript,Mobx State Tree,在MST中,当从使用不同参数类型定义相同操作的模型创建联合类型时,我希望能够在联合类型的实例上调用操作。不幸的是,参数类型似乎是交集类型而不是并集类型 在下面的示例中,Item#updatePayload需要string&boolean[][],但应该接受I extensed SnapshotOrInstance?字符串|未定义:布尔[]string |布尔[]imho 我是不是用错了方法?如果是这样,我将如何改变模型以获得我所期望的 const Foo=types.model({ id:typ

在MST中,当从使用不同参数类型定义相同操作的模型创建联合类型时,我希望能够在联合类型的实例上调用操作。不幸的是,参数类型似乎是交集类型而不是并集类型

在下面的示例中,
Item#updatePayload
需要
string&boolean[][]
,但应该接受
I extensed SnapshotOrInstance?字符串|未定义:布尔[]
string |布尔[]
imho

我是不是用错了方法?如果是这样,我将如何改变模型以获得我所期望的

const Foo=types.model({
id:types.identifier,
有效负载:types.maybe(types.string),
}).行动((自我)=>({
updatePayload(有效负载?:字符串){
self.payload=有效载荷;
},
}));
const Bar=types.model({
id:types.identifier,
有效负载:types.array(types.array(types.boolean)),
}).行动((自我)=>({
updatePayload(有效负载:布尔值[]){
applySnapshot(自有效载荷、有效载荷);
},
}));
const Item=types.union(Foo,Bar);
const Bucket=types.model({
项目:类型。地图(项目),
}).行动((自我)=>({
UpdateTimePayLoad(id:字符串,有效负载?:字符串|布尔值[]){
const item=self.items.get(id);
item&&item.updatePayload(有效载荷);
},
}));
编辑 事实上,
Item#updatePayload
的签名应该(我假设)如下

updatePayload(有效负载:I扩展快照或实例?字符串|未定义:布尔[])

你确定是MST而不是TypeScript本身阻碍了你吗?好吧,两者都可以,但因为我同时使用了两者(就像MST和MobX一样,使用TS和JS的好处远远大于缺点),它们需要结合使用——据我所知,它们是注定要结合使用的!我的意思是,TS通常要求您在重载方法时使用泛型处理程序,并在内部对参数类型进行手动区分。您完全正确,参数最好是条件类型(例如,
I extensed Foo?string | undefined:boolean[][
),而不是我最初编写的类型联合。我会相应地更新我的问题。但仍然不起作用,或者现在没问题了?你确定是MST而不是TypeScript本身阻碍了你吗?好吧,两者都可以,但因为我同时使用了两者(就像MST和MobX一样,使用TS和JS的好处远远大于缺点),他们需要结合起来工作——据我所知,他们是注定要这样做的!我的意思是,TS通常要求您在重载方法时使用泛型处理程序,并在内部对参数类型进行手动区分。您完全正确,参数最好是条件类型(例如,
I extensed Foo?string | undefined:boolean[][
),而不是我最初编写的类型联合。我会相应地更新我的问题。但仍然不起作用,或者现在可以了?