我是 Flow 的新手,从 javascript 中的“随心所欲地使用代码”风格更改为更严格的输入 Flow 有时会让您感到痛苦。
我有一个带有返回以下函数的类:
const { id: idParam, params } = this.config[tag];
return params.map((param: string | ObjectConfigParam) => {
const paramType = typeof param;
let ret = { id: element.id, tag, position };
if (paramType === 'string') {
ret = { ...ret, ...this.resolveStringParam(element, param) };
} else if (paramType === 'object') {
ret = { ...ret, ...this.resolveObjectParam(element, param) };
}
return ret;
})
因为 params
可以是两个不同的东西(一个简单的 string
或一个更复杂的 ObjectConfigParam
)我定义了不同的函数来处理他们。函数的签名是:
resolveStringParam(element: any, param: string): 字段
resolveObjectParam(element: any, param: ObjectConfigParam): 字段
运行流量检查器报如下错误:
无法调用 this.resolveStringParam 并将参数绑定(bind)到 param,因为 ObjectConfigParam [1] 与字符串 [2] 不兼容。
对于第一个电话和
无法调用 this.resolveObjectParam 并将参数绑定(bind)到 param,因为字符串 [1] 与 ObjectConfigParam [2] 不兼容。
对于第二个。
最佳答案
您需要将 typeof param
放在 if
条件中。
顺便说一下,您不需要第二个 if
。
type ObjectConfigParam = { someValue: string };
function resolveStringParam(str: string) {}
function resolveObjectParam(obj: ObjectConfigParam) {}
const x = (param: string | ObjectConfigParam) => {
if (typeof param === 'string') {
resolveStringParam(param);
} else {
resolveObjectParam(param);
}
}
关于javascript - 根据变量的类型调用不同的函数时,正确的 Flow 类型模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58546672/