Использование stream.Transform.from - PullRequest
0 голосов
/ 25 мая 2020

Я хочу быстро объявить поток преобразования без дополнительных библиотек. Превращение генераторов asyn c в потоки преобразования через stream.Transform.from выглядит как хороший выбор.

someReadable.pipe(
        stream.Transform.from(async function* (source, writable) {
          for await (const chunk of source) {
            yield JSON.stringify(chunk, null, 2) + "\n\n";
          }
        })
      )

Почему вышеперечисленное не работает?

TypeScript выдает:

Error:(8, 9) TS2345: Argument of type 'Readable' is not assignable to parameter of type 'WritableStream'.
  Type 'Readable' is missing the following properties from type 'WritableStream': writable, write, end
Error:(8, 31) TS2345: Argument of type '(source: any, writable: any) => AsyncGenerator<string, void, unknown>' is not assignable to parameter of type 'Iterable<any> | AsyncIterable<any>'.
  Property '[Symbol.asyncIterator]' is missing in type '(source: any, writable: any) => AsyncGenerator<string, void, unknown>' but required in type 'AsyncIterable<any>'.
Error:(14, 8) TS2339: Property 'pipe' does not exist on type 'WritableStream'.

1 Ответ

1 голос
/ 25 мая 2020

Функция read на самом деле не из класса Transform. Transform - это дочерний класс от Duplex, который является потомком Readable и Writable. Единственная функция .from в модуле stream - это функция Readable.from, поэтому вы на самом деле вызываете ее.

Вы можете убедиться в этом сами:

$ node
Welcome to Node.js v12.14.0.
Type ".help" for more information.

> const stream = require('stream')
> stream.Readable.from === stream.Transform.from
true

К сожалению, модуль stream не имеет Transform.from или Writable.from.

From https://nodejs.org/api/stream.html#stream_types_of_streams:

Дополнительно этот модуль включает служебные функции stream.pipeline(), stream.finished() и stream.Readable.from().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...