gpt4 book ai didi

javascript - 尽管主体有效,但参数上的枚举类型出现流错误

转载 作者:行者123 更新时间:2023-12-01 02:11:34 25 4
gpt4 key购买 nike

我试图理解为什么 flow 不接受它作为一系列不相交联合类型的有效注释。据我所知,它似乎是有效的 - 显然, eventData 形状匹配这两个用例,但它对这两个“类型”不满意,尽管它们都是有效的。

任何有关我如何构建它以使其不会出现此错误的建议将不胜感激。

type EventOne = {
types: "my.event.name",
eventData: {
c: string,
v: number
}
}

type EventTwo = {
types: "my.second.event.name",
eventData: {
c: string,
v: number
}
}

type EventThree = {
types: "this.one.is.very.different",
eventData: {
x: number,
d: number
}
}

type AnalyticEvent = EventOne | EventTwo | EventThree;

const trackEvent = (payload: AnalyticEvent) => ({
type: "something",
payload
});

const makeTrack = (types: "my.event.name" | "my.second.event.name") => {
trackEvent({
types,
eventData: {
c: "1",
v: 1
}
})
}

makeTrack("my.second.event.name");

为了便于使用,我在流程中有一个示例: https://flow.org/try/#0C4TwDgpgBAogbhAdsA8o6BeKBvAUFKUSAZwC4oAiAWxADoIFlbEBDKiCgGnygaWAAiLYC3J4CBAMbliwAE4BLRAHNuEqHHKIArlQBGEOTwC+uU7iLR4-ACoB3APZQs4wuAhlKNWsQiSHiAAm9IzAzGwcaryhQiJiPFIy8kqqCRpaugZGBKbmlrChNgAWchCYODyWnhTARQrEtAEQtPW0CHJ0gQoAZt2G-Fw8fMixohXqAB4Z+oZRBIHTWSZmuBbuUACCrAA2IMAKktbIzgX8aNAAPqfI9k5XR8DFpRAA3Kv+iLKEciySANYPE4ACjALBA2wcLAWmx2ewODwAlM4AHxQIGuSzkCjEBzsWopQYEUHgyGBMwIt64D5fKgsP4QGw-f7AqpY7zDMKsdgUKBXah0XwfYIc8LcpEYVEYpkA0LotJVObRfijeLqRKUACMhLVmigGrSphyCJWuFp9MZvz+QP5Pj8AWFoVFHApQA

最佳答案

请记住,Flow 是静态分析器,因此无法在运行时跟踪变量的内容(或至少在有限的情况下如此)。

trackEvent 函数调用将计为 refinement invalidation ,但这并不是其失败的原因。

我认为这是一个弱点,但您可以通过应用类型细化然后使用文字来解决它。那里有一些明显的冗余可以重构。

const makeTrack = (types: "my.event.name" | "my.second.event.name") => {
if (types === "my.event.name") {
trackEvent({
types: "my.event.name",
eventData: {
c: "1",
v: 1
}
})
} else {
trackEvent({
types: "my.second.event.name",
eventData: {
c: "1",
v: 1
}
})
}
}

关于javascript - 尽管主体有效,但参数上的枚举类型出现流错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com