typescript - 为什么 TypeScript 在使用 concat 减少数组时会推断出“从不”类型?
问题描述
代码比语言说得更好,所以:
['a', 'b', 'c'].reduce((accumulator, value) => accumulator.concat(value), []);
该代码非常愚蠢,并返回一个复制的数组......
TS 抱怨 concat 的参数:TS2345:“字符串”类型的参数不可分配给“ConcatArray”类型的参数。
解决方案
我相信这是因为 for 的类型[]
被推断为never[]
,这是必须为空的数组的类型。您可以使用类型转换来解决此问题:
['a', 'b', 'c'].reduce((accumulator, value) => accumulator.concat(value), [] as string[]);
通常这不是什么大问题,因为 TypeScript 在根据您对空数组的处理方式找出更好的类型来分配给空数组方面做得不错。但是,由于您的示例正如您所说的那样“愚蠢”,因此 TypeScript 无法进行任何推断并将类型保留为never[]
.
推荐阅读
- r - 应用正则表达式来比较 R 中不同长度的数据帧中的值
- php - RouteCollection.php 第 161 行中的 Laravel 项目 NotFoundHttpException:
- python - 在 Python 中限制访问的类似 Java 的接口
- php - 没有得到所需的日期
- typescript - 使用 typescript 编译器 API 获取接口字段类型信息
- mysql - 计算 MYSQL 中每个用户的子表中的不同记录
- r - 从结果与字符向量匹配的不同数据帧中调用信息
- angular - toHaveBeenCalled() 返回未定义
- sum - 乳胶:为什么 \sum 符号会消失?
- r - 与 is.unsorted() 函数混淆