Почему TypeScript выводит тип 'never' при уменьшении массива с помощью concat? - PullRequest
0 голосов
/ 09 января 2019

Код говорит лучше языка, поэтому:

['a', 'b', 'c'].reduce((accumulator, value) => accumulator.concat(value), []);

Код очень глупый и возвращает скопированный массив ...

TS жалуется на аргумент concat: TS2345: Аргумент типа 'string' не может быть присвоен параметру типа 'ConcatArray'.

1 Ответ

0 голосов
/ 09 января 2019

Я полагаю, что это потому, что тип для [] выводится как never[], который является типом для массива, который ДОЛЖЕН быть пустым. Вы можете использовать приведение типа для решения этой проблемы:

['a', 'b', 'c'].reduce((accumulator, value) => accumulator.concat(value), [] as string[]);

Обычно это не будет большой проблемой, поскольку TypeScript хорошо справляется с задачей определения лучшего типа для назначения пустому массиву на основе того, что вы с ним делаете. Однако, поскольку ваш пример «глупый», как вы говорите, TypeScript не может сделать никаких выводов и оставляет тип как never[].

...