typescript-definitions icon indicating copy to clipboard operation
typescript-definitions copied to clipboard

IncomingMessage should implement ReadableStream

Open andersk opened this issue 5 years ago • 3 comments

(Feel free to redirect me if this bug should be reported elsewhere.)

The definition of IncomingMessage (generated from https://github.com/electron/electron/releases/download/v9.1.0/electron-api.json) fails to reflect the documentation’s guarantee that “IncomingMessage implements the Readable Stream interface”:

  class IncomingMessage extends NodeEventEmitter {

    // Docs: http://electronjs.org/docs/api/incoming-message

    /**
     * Emitted when a request has been canceled during an ongoing HTTP transaction.
     */
    on(event: 'aborted', listener: Function): this;
    // …
    // more events
    // …
    removeListener(event: 'error', listener: Function): this;
    headers: Record<string, string[]>;
    httpVersion: string;
    httpVersionMajor: number;
    httpVersionMinor: number;
    statusCode: number;
    statusMessage: string;
  }

So working code like this fails to type check:

import { app, net } from "electron";
import getStream from "get-stream";

app.on("ready", () => {
  const request = net.request({url: "https://example.com"});
  request.on("response", async response => {
    if (true) {
      // error TS2345: Argument of type 'IncomingMessage' is not assignable to parameter of type 'Stream'.
      console.log(await getStream(response));
    } else {
      // error TS2495: Type 'IncomingMessage' is not an array type or a string type.
      for await (const chunk of response) {
        console.log(chunk.toString());
      }
    }
  });
  request.end();
});

andersk avatar Jul 09 '20 22:07 andersk

Refs: https://github.com/electron/electron/issues/22730

MarshallOfSound avatar Jul 10 '20 00:07 MarshallOfSound

Still an issue in Electron 21.1.0, 22.0.0-alpha.3, and 23.0.0-nightly.20221007.

andersk avatar Oct 08 '22 03:10 andersk

The confusing part is that the docs stands that "IncomingMessage implements the Readable Stream...". So we can expect that the stream is usable like any other ones.

efattal avatar Feb 01 '23 09:02 efattal