Node.jsストリームライブラリクラスから拡張したクラスを作成しました。Node.jsをオーバーロードする方法タイプスクリプトの書き込み可能な終了メソッド
import * as stream from 'stream';
export class PipeWritable extends stream.Writable {
...
public end(): void;
public end(chunk: any, cb?: Function): void;
public end(chunk: any, encoding?: string, cb?: Function): void {
super.end();
}
}
これはエラーにつながる:@types/node/index.d.ts
から1:オーバーロードされたメソッドの
error TS2394: Overload signature is not compatible with function implementation
引数構造を1コピーします。
私はtypescriptですが、メソッドのオーバーロードをサポートしていませんが、知っているあなたは、モジュールを宣言する場合は、Node.jsのモジュールの流れに見ることができるようにあなたは、そのような何かを行うことができます。
declare module "stream" {
export class Writable extends Stream implements NodeJS.WritableStream {
...
end(): void;
end(chunk: any, cb?: Function): void;
end(chunk: any, encoding?: string, cb?: Function): void;
...
}
}
だから私の質問は、どのようにIストリームを上書きできます。書き込み可能なメソッドend()
?スニペットで
[documentation](https://www.typescriptlang.org/docs/handbook/functions.html)の* Overloads *セクションをご覧ください。要点は、TypeScriptが一致するオーバーロードを探すとき、関数の実装のシグネチャが考慮されないことです。また、関数の実装の署名は、すべてのオーバーロードと互換性がなければなりません。 – cartant
私は[ドキュメンテーションのオーバーロードのセクション](https://www.typescriptlang.org/docs/handbook/functions.html#overloads)を複数回勉強しましたが、受け入れられない宣言で何かできることは奇妙です実装で。私は、モジュール宣言が既存のjavascript(またはネイティブ)ソリューションとの "リンク"として使用されているという事実が原因だと思います。 –