我一直在使用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
并且不知道该寻找什么。
定义中的类型似乎没问题,它们彼此无关,而源指向第0行。
之前我从未见过这个错误,我不希望有任何帮助来追踪这个错误的实际来源。
我只需要帮助理解错误本身的含义以及为什么flowjs会在第0行报告错误src/framework/uitable/show.js:0
。
答案 0 :(得分:10)
inconsistent use of library definitions
是什么意思?当类型A
流向类型B
时,会发生大多数流错误。例如,如果您调用的函数需要类型为B
的参数,但您将其传递给类型为A
的函数。发生这种情况时,Flow会输出有关类型A
与类型B
不兼容的错误。
有时,你有像
这样的代码// in file foo.js
libraryCallB(libraryCallA());
在这种情况下,libraryCallA()
的返回类型可能与libraryCallB()
的参数类型不匹配。因此Flow将发出类型不兼容的错误。但是,由于两个库调用都是在库中定义的(比如lib.js
),因此错误消息根本不会提到foo.js
。这不是理想的,因为错误可能在foo.js:0
所以,作为一个绑带,我们只是将foo.js:0
放在错误的顶部作为提示。这意味着当我们注意到一个库类型流入不兼容的库类型时,我们正在进行类型检查foo.js
。
我们一直在尝试改进错误消息,因此这些错误应该不那么普遍。但他们仍然会发生。
src/framework/uitable/show.js
flow check --traces 10
它运行正常flow check
,但保存这些&#34;跟踪&#34;,这有点像Flow的内部类型检查逻辑的堆栈跟踪。 10
表示打印深度为10的记录。输出很难理解,除非您熟悉Flow的内部结构,但可能会提到src/framework/uitable/show.js
中触发错误的位置Array<string>
被用作Array<UiTableConfigColumnType>
有关,反之亦然。