所以我得到了这种类型的错误,并没有多大意义
src/bins/assembler.js:19
19: compileTo(module, stdout);
^^^^^^ tty$WriteStream. This type is incompatible with
11: export function compileTo(repr: ir.Module, target: stream.Writable) {
^^^^^^^^^^^^^^^ stream$Writable. See: src/asm/output.js:11
澄清
stdout
是process.stdout
根据我的理解stdout
是stream.Writable
,我检查了实施中的type of stdout
是否确定,是的,是......
declare class Process extends events$EventEmitter {
...
stdout : stream$Writable | tty$WriteStream;
...
}
declaration var process: Process;
不确定我做错了什么......但我使用的是最新版本的流程(截至今天)
$ flow version
> Flow, a static type checker for JavaScript, version 0.25.0
就像我想要完成的是拥有一个函数来编写通用输出,例如文件或在这种情况下stdout
,并且根据我的理解stream.Writable
就是那种类型,并且stdout
根据它的声明订阅了它的界面...
我的假设是否正确,还是我误解了|
运算符在stdout
定义中的观点?我是否必须更加明确compileTo
中的类型?或者在设置flow
时我做错了什么?
这是我的第一个流程项目,所以我可能错过了一些明显的东西......
答案 0 :(得分:3)
根据stdout
declaration的规定,类型可以是stream$Writable
或tty$WriteStream
。由于您的compileTo
函数只接受仅由stream.Writable
解析的声明stream$Writable
,因此您只能传递与此类型匹配的参数。
如果我们仔细查看其他声明,则无法将tty$WriteStream
的分辨率分配给Stream.Writable
。
declare class tty$WriteStream extends net$Socket
declare class net$Socket extends stream$Duplex
declare class stream$Duplex extends stream$Readable
要使其工作,只需将两种类型作为可能的参数添加。
function compileTo(repr: ir.Module, target: stream.Writable | tty.WriteStream) {}
如果您不想仅为定义导入tty
模块,请使用类型的全局定义。
function compileTo(repr: ir.Module, target: stream$Writable | tty$WriteStream) {}