flowjs中的奇怪错误消息"库定义的使用不一致"

dob*_*ler 3 flowtype

我一直在使用flowjs,大多数错误信息都很清楚,但现在我有这样的事情:

src/framework/uitable/show.js:0
inconsistent use of library definitions
 46:    columns: Array<UiTableConfigColumnType>
                       ^^^^^^^^^^^^^^^^^^^^^^^ object type. This type is incompatible with. See lib: src/framework/uitable/uitable.js.flow:46
 52: type UiTableDataColsType = Array<string>;
                                      ^^^^^^ string. See lib: src/framework/uitable/uitable.js.flow:52

src/framework/uitable/show.js:0
inconsistent use of library definitions
 52: type UiTableDataColsType = Array<string>;
                                      ^^^^^^ string. This type is incompatible with. See lib: src/framework/uitable/uitable.js.flow:52
 46:    columns: Array<UiTableConfigColumnType>
                       ^^^^^^^^^^^^^^^^^^^^^^^ object type. See lib: src/framework/uitable/uitable.js.flow:46
Run Code Online (Sandbox Code Playgroud)

并且不知道该寻找什么.

定义中的类型似乎没问题,它们彼此无关,源指向第0行.

我以前从未见过这个错误,我不希望有任何帮助来追踪这个错误的实际来源.

我只是需要一些帮助来理解错误本身的含义以及为什么flowjs src/framework/uitable/show.js:0在第0行报告错误.

Gab*_*evi 10

什么inconsistent use of library definitions意思?

当类型A流向类型时,会发生大多数Flow错误B.例如,如果您调用一个期望参数具有类型的函数B,但您将其传递给类型A.发生这种情况时,Flow会输出有关类型A与类型不兼容的错误B.

有时,你有类似的代码

// in file foo.js
libraryCallB(libraryCallA());
Run Code Online (Sandbox Code Playgroud)

在这种情况下,可能返回类型libraryCallA()与参数类型不匹配libraryCallB().因此Flow将发出类型不兼容的错误.但是,由于两个库调用都是在库中定义的(例如lib.js),因此根本不会提及错误消息foo.js.这不是理想的,因为bug可能在foo.js:0

所以,作为一个绑定者,我们只是foo.js:0在错误的顶部作为暗示.这意味着foo.js当我们注意到一个库类型流入不兼容的库类型时,我们进行了类型检查.

我们一直在努力改进错误消息,因此这些错误应该不那么普遍.但他们仍然会发生.

你的代码怎么样?

  • 错误可能在某处 src/framework/uitable/show.js
  • 尝试flow check --traces 10它运行正常flow check,但保存这些"跟踪",这有点像Flow的内部类型检查逻辑的堆栈跟踪.这10意味着打印深度为10的跟踪.输出很难理解,除非您熟悉Flow的内部结构,但可能会提到src/framework/uitable/show.js触发错误的位置.
  • 我猜这个错误与一个Array<string>被用作的错误有关Array<UiTableConfigColumnType>,反之亦然.