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
Run Code Online (Sandbox Code Playgroud)
根据Node的文档,我很确定该方法存在.我真的不想分叉Flow项目来修复这么小的东西.
在我等待Facebook接受拉取请求时是否有解决方法?
找到了一个解决方案,使我可以覆盖Flow内部使用的Node.js包含的声明。
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;
}
Run Code Online (Sandbox Code Playgroud)
每个地方都Buffer | String被替换为包括在内Object。
该/flow-typed/node.js文件在项目的版本控制中进行管理。但是,一旦较新版本的Flow支持Node.js中的其他语法,则可以删除此声明。同时,它解决了由于Flow落后于Node.js及其普遍不正确性而导致的Flow错误。
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |