TypeScript/Node.js中process.stdin的正确类型及兼容定义方法
类型说明与解决方案
各返回值的类型归属
process.stdin的类型是NodeJS.ReadStream,属于stream.Readable的子类fs.createReadStream()的返回值类型是fs.ReadStream,同样属于stream.Readable的子类- 两者都不属于
net.Socket类型,net.Socket是TCP网络套接字对应的专属类型,和文件流、标准输入流无关
你给出的声明方式存在问题
原声明代码有两个错误:
- 类型匹配错误:
fs.ReadStream不能赋值给NodeJS.ReadStream类型,二者是平级的不同子类,没有继承关系 - 语法错误:变量已经提前声明了类型,赋值时不能再加
: any的类型注解,该写法不符合TS语法规范,即便要强制类型转换也应该用as any断言
替换any的正确类型
方案1:通用可读流类型(最推荐)
如果你后续只使用所有可读流通用的API(比如pipe、监听data/end事件、read()方法等),直接使用stream.Readable作为类型即可,兼容性最高:
import type { Readable } from 'stream'; const input: Readable = filePath ? fs.createReadStream(filePath) : process.stdin;
方案2:联合类型
如果你需要用到两类流各自独有的属性或方法,可以使用联合类型:
import type { ReadStream as FsReadStream } from 'fs'; const input: FsReadStream | NodeJS.ReadStream = filePath ? fs.createReadStream(filePath) : process.stdin;
内容的提问来源于stack exchange,提问作者Jeff Pal
相关产品推荐
相关产品推荐

