【问题标题】:How do I suppress flow symbol errors?如何抑制流符号错误?
【发布时间】:2018-01-21 07:59:50
【问题描述】:

我正在尝试在 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

【问题讨论】:

  • 你在行前尝试过 // $FlowFixMe,我在你的配置中看到了
  • 也请编辑你的问题标题,应该是:如何抑制流符号错误?
  • // $FlowFixMe 应该是有效的答案。 :) 这个对我有用。感谢您的建议,我会更新标题。

标签: ecmascript-6 babeljs flowtype


【解决方案1】:

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

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

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

【讨论】:

  • 是的,我知道缺少对符号的支持,与此同时 // $FlowFixMe 解决了这个问题。我希望 Facebook 能尽快解决这个问题。
猜你喜欢
  • 2020-11-12
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 2023-03-19
  • 2012-03-24
  • 2012-10-29
  • 2018-10-11
相关资源
最近更新 更多