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