gpt4 book ai didi

javascript - Flowtype 类声明与其实现不兼容

转载 作者:太空宇宙 更新时间:2023-11-04 16:27:07 26 4
gpt4 key购买 nike

我在 b.js 文件中定义了一些类(在本例中名为 B),它的声明在 b.js.flow< 中定义 文件。我假设 flowtype 将类与其声明相关联,但不幸的是,当我尝试使用某些在其方法内部接受类 B 实例的函数时,flowtype 引发了以下错误:

b.js:9
9: return this.a.foo(this)
^^^^^^^^^^^^^^^^ call of method `foo`
5: export default class B {
^ B. This type is incompatible with
6: foo(b: B): null;
^ B. See: a.js.flow:6

我猜这是由 treating classes as nominal types 引起的。有没有办法将类实现与其声明关联起来以防止出现此错误?

这里有我用于测试的文件的完整内容:

a.js:

// @flow

import type B from './b'

export default class A {
foo(b: B) {
return null
}
}

a.js.flow:

// @flow

import type B from './b'

declare export default class A {
foo(b: B): null;
}

b.js:

// @flow

import A from './a'

export default class B {
a: A;

bar() {
return this.a.foo(this)
}
}

b.js.flow:

// @flow

import type A from './a'

declare export default class B {
a: A;
bar(): null;
}

最佳答案

如果 .js 文件是也通过 Flow 检查。其目的是让人们能够在 npm 上发布流类型声明,方法是 (a) 转译原始源文件,以便人们可以在没有自己的转译步骤的情况下运行它们,以及 (b) 将 .flow 扩展添加到原始源文件,仍然具有类型,因此 Flow 可以进行类型检查。 flow-typed由于各种原因,这种方法更可取,但这是一个单独的问题。

.js.flow 文件旨在用作.h 样式的声明文件。最有可能的是,最好的解决方案是简单地删除您的 .js.flow 文件。当我在没有 .js.flow 文件的情况下测试您的示例时,它的类型检查得很好。

关于javascript - Flowtype 类声明与其实现不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40129775/

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