我想将一个原型函数添加到NodeJS.ReadableStream。这是我尝试过的代码以及产生的错误。
declare namespace NodeJS {
interface ReadableStream {
readAll(encoding: string): Promise<string>;
}
}
namespace NodeJS {
ReadableStream.prototype.readAll = function (this: ReadableStream, encoding: string) {
// do stuff
};
}
lib.es6.d.ts:属性'readAll'在'ReadableStream'类型中不存在。
我不确定如何在my.ts
内正确引用NodeJS ReadableStream接口而不是lib.es6的ReadableStream接口。我尝试通过namespace NodeJS
提供范围,但它不起作用。
node \ @types \ index.d.ts: Class'Readable'错误地实现了接口'ReadableStream'。 “可读”类型中缺少属性“readAll”。
相关
请注意,我尝试使用How to extend String Prototype and use it next, in TypeScript问题中的学习,但尚未找到解决方案。
根据要求,这是node\@types\index.d.ts
产生第二个错误的代码。定义Readable
类的最后一行特别是错误。代码源自依赖"@types/node": "^8.5.8"
。注意,我觉得这是来自7000+行文件的相关代码,不会粘贴其余部分。您可以在完整的荣耀here中查看它。
declare module "stream" {
import * as events from "events";
class internal extends events.EventEmitter {
pipe<T extends NodeJS.WritableStream>(destination: T, options?: { end?: boolean; }): T;
}
namespace internal {
export class Stream extends internal { }
export interface ReadableOptions {
highWaterMark?: number;
encoding?: string;
objectMode?: boolean;
read?: (this: Readable, size?: number) => any;
destroy?: (error?: Error) => any;
}
export class Readable extends Stream implements NodeJS.ReadableStream {
通过评论中的建议,我得到了以下代码,它解决了两个原始编译器错误。但是,在运行时myReadableStreamVariable.readAll is not a function
会弹出另一个错误。
my.ts
declare namespace NodeJS {
interface ReadableStream {
readAll: typeof readAll;
}
}
function readAll(this: NodeJS.ReadableStream, encoding: string) {
// do stuff
};
hack.ts
import { Readable } from "stream";
declare module "stream" { interface Readable extends NodeJS.ReadableStream { } }