Почему для оператора Observable .map требуется второй параметр в обратном вызове? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть функция, в этом случае я использую XLSX.read, эта функция определена для получения одного аргумента и второго, который может быть undef (что я и хочу).

Пока что,когда я пытаюсь использовать эту функцию pointfree в Rxjs Observable, как это

.pipe(
  .map(XLSX.read)
)

, я получаю сообщение об ошибке.

error TS2345: Argument of type '(data: any, opts?: ParsingOptions | undefined) => WorkBook' is not assignable to parameter of type '(value: any, index: number) => WorkBook'.
  Types of parameters 'opts' and 'index' are incompatible.
    Type 'number' is not assignable to type 'ParsingOptions | undefined'.

Вместо этого требуется TypeScript,

.pipe(
  .map( (x:any) => XLSX.read(x) )
),

Это потому, что Observable.operator.map определяется как

map<T, R>(project: (value: T, index: number) => R, thisArg?: any): OperatorFunction<T, R>

Почему эта карта (project: (value: T, index: number), а не (project: (value: T, index?: number) с необязательно index аргумент, который, как кажется, поддерживает TypeScript,

В JavaScript каждый параметр является необязательным, и пользователи могут его оставить по своему усмотрению.Когда они это сделают, их значение не определено. Мы можем получить эту функциональность в TypeScript, добавив ? в конец параметров, которые мы хотим сделать необязательными.

...