typescript - MobX 状态树:联合中的动作参数类型
问题描述
在 MST 中,当从定义具有不同参数类型的相同操作的模型创建联合类型时,我希望能够在联合类型的实例上调用操作。不幸的是,参数类型似乎是交集类型而不是联合类型。
在下面的示例中,Item#updatePayload
期望string & boolean[][]
,但应该接受I extends SnapshotOrInstance<typeof Foo> ? string | undefined : boolean[][]
恕我直言。string | boolean[][]
我是否以某种错误的方式使用它?如果是这样,我将如何更改模型以获得我的期望?
const Foo = types.model({
id: types.identifier,
payload: types.maybe(types.string),
}).actions((self) => ({
updatePayload(payload?: string) {
self.payload = payload;
},
}));
const Bar = types.model({
id: types.identifier,
payload: types.array(types.array(types.boolean)),
}).actions((self) => ({
updatePayload(payload: boolean[][]) {
applySnapshot(self.payload, payload);
},
}));
const Item = types.union(Foo, Bar);
const Bucket = types.model({
items: types.map(Item),
}).actions((self) => ({
updateItemPayload(id: string, payload?: string | boolean[][]) {
const item = self.items.get(id);
item && item.updatePayload(payload);
},
}));
编辑
实际上,Item#updatePayload
应该(我假设)的签名如下
updatePayload<I extends SnapshotOrInstance<typeof Item>>(payload: I extends SnapshotOrInstance<typeof Foo> ? string | undefined : boolean[][])
解决方案
推荐阅读
- telegram - Telegram Api - 有没有办法使用电话号码而不是用户名将人员添加到频道/组?
- c# - Math.Net 和 alglib 默认返回不同的 FFT 输出
- vb.net - Await Task.Delay(x) 更改 UI 或立即完成
- c - 如何使用递归遍历二维数组
- http - 到 TCP 的透明 HTTP 隧道
- wpf - 如何绑定到 MouseDragElementBehavior 的 X 位置?
- java - 如何将 Dto 修补到实体?
- caching - pyspark cache() 数据框问题
- python - 请求自动化
- shell - 为什么在 cp/mv 失败的情况下文件重定向会成功?