我有一个文件Foo.js
// @flow
export const Foo = ((
x: number,
y: number
) => {
class Foo {
bar1: number;
bar2: number;
constructor(x: number, y: number) {
this.bar1 = x;
this.bar2 = y;
}
}
return Foo;
})();Flow check返回以下错误:
无法为此模块构建类型化接口。您应该用类型注释这个模块的导出。无法确定此调用表达式的类型。请提供一个注释,例如,在此expression.Flow(signature-verification-failure)周围添加一个类型,因为函数1需要另一个argument.Flow(不兼容-调用) Foo.js(2,21):1函数。
如果我对最后一行做了这个更改,错误就会消失:
})(): void;但新的错误是:
意外令牌
:,预期令牌;流(ParseError)
这让我相信这可能不是正确的解决办法。模块被格式化为这样的原因是因为它被用作其他文件中的对象,如:new Foo(1,2)
发布于 2020-11-01 01:07:17
你基本上有两个问题,都是不相关的。
无法为此模块构建类型化接口。您应该用类型注释这个模块的导出。无法确定此调用表达式的类型。请提供一个注释,例如,在此expression.Flow(signature-verification-failure)周围添加一个类型强制转换
第一个原因是类型优先体系结构,这意味着每当您在模块中导出变量时,必须显式地键入它是什么。你可以找到解释这里。
不能调用函数,因为函数1需要另一个argument.Flow(不兼容-调用)
这是因为您已经创建了一个匿名函数,在它导出之前立即调用它,这个调用函数期望x和y作为数字,但是您没有调用它。
修复程序看起来类似于这。我所做的就是为导出创建一个interface类型,并使用(1, 2)调用匿名函数。这是否是您真正想要的用例取决于您的决定,但是您可以调整代码以适应您的使用,因为我怀疑您是否真的想硬编码(1, 2)。
// @flow
interface FooT {
// something
}
export const Foo: FooT = ((
x: number,
y: number
) => {
class Foo {
bar1: number;
bar2: number;
constructor(x: number, y: number) {
this.bar1 = x;
this.bar2 = y;
}
}
return Foo;
})(1, 2);https://stackoverflow.com/questions/64627581
复制相似问题