如何抑制流量符号错误?

时间:2017-08-13 07:56:27

标签: ecmascript-6 babeljs flowtype

我试图在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

1 个答案:

答案 0 :(得分:1)

我不认为类型错误与Symbol本身有任何关系。 Flow告诉您的是,您使用键Versionname声明了version类型,但现在您正在查找该对象上的符号,这不是'部分类型。如果您执行了version["randomString"],则会收到类似的错误,因为该属性未被声明为Version类型的一部分。

正如另一篇评论所提到的,你可以忽略$FlowFixMe的错误。但是这段代码本身可能不安全,因为你依赖于在这个对象上定义的额外符号但不让Flow证明它。您可以尝试以避免必须执行这些动态查找的方式为Version类型建模。

(编辑:嗯,好吧,看起来我说得太快了.Flow并不喜欢使用计算机符号键,即使它在理论上可以检查它们。请参阅此问题:https://github.com/facebook/flow/issues/2928