当工具报告错误时,有没有办法解决flow-bin
的错误,实际上这是flow
本身的错误?
例如,使用Flow v0.62和Node.js Buffer#swap64
方法:
Error: lib/index.js:88
88: int64buf.swap64() // turn into Little-Endian
^^^^^^ property `swap64`. Property not found in
88: int64buf.swap64() // turn into Little-Endian
^^^^^^^^ Buffer
根据Node的文档,我很确定该方法存在。我并不是真的想要解决Flow项目只是为了解决这么小的问题。
在等待Facebook接受拉取请求时是否有解决方法?
答案 0 :(得分:4)
找到一个解决方案,允许我覆盖Node.js包含的声明Flow在内部使用。
Flow允许使用$projectRoot/flow-typed
文件夹来包含类型的自定义声明,这通常用于包含常见npm库的声明。
同样的文件夹也可以用来覆盖Flow内部为其Node.js标准库使用的一些类型。
我必须创建一个名为$projectRoot/flow-typed/node.js
的文件,并在此文件中复制https://github.com/facebook/flow/blob/master/lib/node.js的整个部分。复制部分部分不起作用,因为此时Flow不支持扩展声明的类型(https://github.com/facebook/flow/issues/396。)
例如,获取Transform
流并将objectMode
类型参数添加到其_transform
方法中。看起来像这样 -
declare class stream$Transform extends stream$Duplex {
_transform(
chunk: Buffer | string | Object,
encoding: string,
callback: (error: ?Error, data?: Buffer | string | Object) => void
): void;
_flush(
callback: (error: ?Error) => void
): void;
}
其中每个Buffer | String
都被替换为包含Object
。
/flow-typed/node.js
文件在项目的版本控制中进行管理。但是,一旦较新版本的Flow支持Node.js中的额外语法,就可以删除此声明。同时,它解决了Flow流量滞后于Node.js及其一般错误导致的错误。