Frx*_*rem 11 javascript flowtype
我正在学习Flow,因此我正在开发一个带有JavaScript和Flow的小爱好项目.我有一个类Foo和一个不同的类Bar,我想在一个Foo对象数组中作为构造函数中的一个选项.但是,我还希望能够为每个这样的对象发送一些其他数据,因此我希望有一个数组,其中每个元素都是普通Foo对象,或者Foo包含在数组或对象中的对象.
但是,当我尝试为此编写代码时,我得到了一些奇怪的错误,我不明白其中的原因.据我所知,它认为存在类型冲突,因为Foo它与所有类型的联合不兼容,但据我所知它应该只需要与它们中的至少一个兼容......
这是重现我得到的确切错误所需的最小代码(链接到Try Flow示例):
// @flow
class Foo { }
interface BarOptions {
foos: ( Foo | [ Foo ] | { foo: Foo } )[]; // line 6
}
class Bar {
constructor(options?: BarOptions) { }
}
const foo: Foo = new Foo();
const bar = new Bar({
foos: [ foo ], // line 16
});
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Line 6:
tuple type: This type is incompatible with Foo
object type: This type is incompatible with Foo
Line 16:
tuple type: This type is incompatible with Foo
object type: This type is incompatible with Foo
Run Code Online (Sandbox Code Playgroud)
这些错误是否有直观(或不直观)的原因?
我认为BarOptions实际上应该是类型别名而不是接口。接口声明类可以实现的类型。接口不是数据类型,它们不应该有字段(包含数据)。
interface BarOptions如果我们更改为,一切都会正常type BarOptions =。
或者,您可以更改foo为 getter 函数:
interface BarOptions {
foos(): ( Foo | [ Foo ] | { foo: Foo } )[];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |