我正在尝试创建一个电子应用程序。在main.ts中,我构造了一个我认为是相当简单的类(如下),但构造函数无法运行。对readline.createInterface(inputStream)的调用失败。似乎运行时不认为调用fs.createReadStream返回的变量具有在其上称为“ on”的函数。

例外是

Uncaught Exception:
TypeError: Cannot read property 'on' of undefined
    at new Interface (readline.js:142:10)
    at Object.exports.createInterface (readline.js:28:10)
    at new FileMonitor (/Users/mikedice/code/electron-rm/app/FileMonitor.js:13:38)
    at App.Main.onReady (/Users/mikedice/code/electron-rm/app/Main.js:27:23)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:191:7)


这是生成它的代码块。

import readline = require("readline");
import fs = require("fs");

export class FileMonitor
{
    constructor(public filePath:string){
        if (!fs.existsSync(filePath)){
            console.log(`file does not exist at path ${filePath}`);
            return;
        }

        var inputStream = fs.createReadStream(filePath);
        var readInterface = readline.createInterface(inputStream);

        readInterface.on('line', (val)=>{
            // when new lines arrive we can publish an event to listeners
            console.log(val);
        });
    }
}


我认为,问题在于,在文件/Users/mikedice/code/electron-rm/node_modules/@types/node/index.d.ts中,fs.createReadStream返回一个ReadStream对象,并且在同一文件中readline.createInterface期望NodeJS.ReadableStream和TypeScript会将这两种类型视为不同,即使运行时期望它们是同一件事。我不确定此特定问题以及通常的此类问题的解决方法是什么。似乎该语言的类型系统与运行时不一致,但不确定为什么执行代码时运行时无法解决问题。有什么建议么?

export function createReadStream(path: string | Buffer, options?: {
    flags?: string;
    encoding?: string;
    fd?: number;
    mode?: number;
    autoClose?: boolean;
    start?: number;
    end?: number;
}): ReadStream;

export function createInterface(input: NodeJS.ReadableStream,
output?: NodeJS.WritableStream,
completer?: Completer | AsyncCompleter,
terminal?: boolean): ReadLine;

最佳答案

您需要修改readline.createInterface()选项调用以传递具有属性input.readline的对象。 createInterface()需要分配了输入和/或输出流的对象。

readline.createInterface({input: inputStream});

关于node.js - TypeScript readline.createInterface引发异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44657189/

10-09 20:28