类型'string |的Typescript错误参数 数字”不能分配给“从不”类型的参数

grkmk

我正在使用Typescript编写一段代码,并且遇到了以下问题,我对它为什么发生没有多大意义。

下面的代码块Argument of type 'string | number' is not assignable to parameter of type 'never'在编译时触发错误。

interface A {
    x: number | string
}

const a1: A[] = [{x: 1}, {x: 'a'}]
const b: number[] | string[] = ['a', 'b']

const a2 = a1.filter(a => b.includes(a.x))

然而; 如果我要(number | string)[]在声明/分配时使用b它,则可以正常工作。

我检查了定义文件中的includesArray<T>.includes(searchElement: never, ...),但这也没有任何意义,因为我认为泛型T将包含在内number[] | string[]

如果有人可以发光为什么Array<T>不覆盖number[] | string[]但覆盖,我将不胜感激(number | string)[]

柳博米尔·瓦西列夫

您设置的类型bnumber[] | string[]这意味着,其类型将是任一数字阵列(number[]字符串数组(string[]) -它精确地取决于你初始化与所述变量的数据。

当您这样做时:

const b: number[] | string[] = ['a', 'b'];

您实际上将其类型设置为string[]-此变量b现在与数字无关,而只是一个字符串数组。

然后,您继续执行以下操作:

const a2 = a1.filter(a => b.includes(a.x));

因此,对于-的每个值(a1可能是astring或a)number,请检查其是否存在于数组中b如上所述,b并且是一个字符串数组并且您不能将number | stringto传递includes(),对于此数组,该数组仅需要一个string参数(此数组为Array<string>)。因此,编译器错误。


现在,对于另一种情况,您建议:

const b: (number | string)[] = ['a', 'b'];

这定义了一个类型的数组number | string,也就是说,它的每个元素可以是不同的类型-anumber或a string因此,您可以拥有例如:

const b: (number | string)[] = [1, 'b'];

碰巧在您的定义中,所有元素(它们中的两个)都是相同的类型- string

现在,您打到的电话时includes(),情况就大不一样了。由于您的数组现在可以同时包含数字和字符串,因此include()可以很高兴地同时使用这两种类型(此数组为Array<number | string>),并且a.x可以同时使用这两种类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Typescript枚举键入错误(类型'string'的参数不能分配给类型的参数)

参数类型 'String"?"' 不能分配给参数类型 'String'

参数类型“RxString”不能分配给参数类型“String”

“Params”类型的参数不能分配给“string”类型的参数

'number'类型的参数不能分配给'string'类型的参数

“any[]”类型的参数不能分配给“string”类型的参数

'string | 类型的参数 number' 不能分配给类型为 'string' 的参数。“数字”类型不能分配给“字符串”类型

Typescript编译器永远不会错误:键入'string | 数字”不能分配给“从不”类型。类型“字符串”不可分配为类型“从不”

TypeScript-类型'String'的参数不能分配给类型'string'的参数

'{ keyPrefix: string; 类型的 ReactJS Typescript 参数 }' 不能分配给字符串类型的参数

输入'string | 数字”不能分配给“从不”类型

错误:参数类型“void Function()?” 不能分配给参数类型“void Function(String?)?”

TypeScript 错误:类型 'string' 不能分配给类型 'number | ""'

参数类型“List<DropdownMenuItem<String>>”不能分配给参数类型“List<String>”

'(string | undefined)[]' 类型的参数不能分配给 'string[]' 类型的参数

参数类型 'Map<String, Object>' 不能分配给参数类型 'String'.dartargument_type_not_assignable

'string | 类型的参数 null' 不能分配给类型为 'string' 的参数

参数类型 'Map<String, dynamic> Function()' 不能分配给参数类型 'Map<String, dynamic>'

参数类型 'string | null' 不能分配给参数类型 'string | 数量 | 布尔值'

'string | 类型的参数 null' 不能分配给类型为 'String' 的参数。类型 'null' 不能分配给类型 'String'。[角度]

错误:参数类型“字符串?” 不能分配给参数类型 'String',因为 'String?' 可以为空,而 'String' 不是

“字符串”类型的参数不能分配给“{ email: string;”类型的参数。}' NGXS

如何解决“参数类型'String'不能分配给参数类型'int'”-Flutter

参数类型“Object”不能分配给参数类型“Map<String, dynamic>”

参数类型 'List<Series<dynamic, dynamic>>' 不能分配给参数类型 'List<Series<dynamic, String>>

'{ key: string; 类型的参数 }[]' 不能分配给“JSON[]”类型的参数

不能将参数类型“String”分配给参数类型“Uri”

'number | 类型的参数 undefined' 不能分配给“string”类型的参数

'Promise <any>'类型的参数不能分配给'string'类型的参数