Array.prototype.map.call () имеет возвращаемый тип unknown [] - PullRequest
1 голос
/ 02 августа 2020

Я пишу функцию, которая принимает объект, подобный массиву, и преобразует его в массив чисел. Однако TypeScript 3.9.7 не выводит тип возвращаемого значения Array.prototype.map.call() - он считает, что он возвращает unknown[].

let input: string[] = ["1", "2", "3"];
// OK
let result1: number[] = input.map(str => Number(str));
// error TS2322: Type 'unknown[]' is not assignable to type 'number[]'
let result2: number[] = Array.prototype.map.call(input, str => Number(str));

Я хочу, чтобы TypeScript выводил тип result2 из моего обратный звонок (str => Number(str)). Что я могу сделать, помимо , от использования утверждений типа?

Изменить: я использую параметр компилятора --strict.

1 Ответ

0 голосов
/ 02 августа 2020

Если вы используете опцию --strict, функция call будет определена как

call<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg: T, ...args: A): R;

, как вы можете видеть, R теперь является типом возвращаемого значения.

Для вашего Например, вы можете установить R как number[]

let result2 = Array.prototype.map.call<string[], any[], number[]>(input, (str: string) => Number(str));

Теперь result2 это number[].

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