我试图在Flow中为我的一个对象创建类型定义。我不确定Flow是否支持Symbols
,但在这种情况下我怎么能跳过此警告?
const version: Version = this.getVersion(12345);
const upLink: string = version[Symbol.for('__my_amazing_symbol')];
但是在验证上面的行时,我在运行flow check
时出现以下错误。
Error: src/local.js:197
197: const upLink: string = version[Symbol.for('__my_amazing_symbol')];
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ access of computed property/element. Computed property cannot be accessed with
197: const upLink: string = version[Symbol.for('__my_amazing_symbol')];
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Symbol
Found 2 errors
这是我的这种对象。
declare export type Version = {
name: string;
version: string;
};
流程配置
[ignore]
.*/node_modules/.*
lib/.*
[include]
[libs]
node_modules/@mod/types/lib/
[lints]
[options]
suppress_comment= \\(.\\|\n\\)*\\$FlowFixMe
unsafe.enable_getters_and_setters=true
[version]
^0.52.0
答案 0 :(得分:1)
我不认为类型错误与Symbol
本身有任何关系。 Flow告诉您的是,您使用键Version
和name
声明了version
类型,但现在您正在查找该对象上的符号,这不是'部分类型。如果您执行了version["randomString"]
,则会收到类似的错误,因为该属性未被声明为Version
类型的一部分。
正如另一篇评论所提到的,你可以忽略$FlowFixMe
的错误。但是这段代码本身可能不安全,因为你依赖于在这个对象上定义的额外符号但不让Flow证明它。您可以尝试以避免必须执行这些动态查找的方式为Version
类型建模。
(编辑:嗯,好吧,看起来我说得太快了.Flow并不喜欢使用计算机符号键,即使它在理论上可以检查它们。请参阅此问题:https://github.com/facebook/flow/issues/2928)