如何用readline.createInterface循环读行?解决TS2504报错
解决TypeScript中readline Interface的async iterator报错(TS2504)
问题根源
TypeScript对Node.js readline.Interface的类型定义,在旧版@types/node包中未包含Symbol.asyncIterator的声明,导致for await...of语法无法识别其为异步迭代器,触发TS2504错误。
解决方案
1. 升级@types/node(推荐)
较新的@types/node已经补全了该类型声明,直接更新到最新稳定版即可:
npm install @types/node@latest -D
或使用yarn:
yarn add @types/node@latest -D
2. 手动补充类型声明(临时方案)
如果无法升级类型包,在项目中新增一个类型声明文件(例如src/types/readline.d.ts),添加以下内容:
declare module 'readline' { export interface Interface { [Symbol.asyncIterator](): AsyncIterableIterator<string>; } }
确保该文件被tsconfig.json的include字段覆盖。
修复后的示例代码
const fs = require('fs'); const readline = require('readline'); const fileStream = fs.createReadStream('test.text'); const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity, }); // 此时for await...of可正常运行 for await (const line of rl) { // 处理每一行逻辑 console.log(line); }
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

