📌  相关文章
📜  元素隐式具有“任何”类型,因为类型“0”的表达式不能用于索引类型“验证器”<unknown[]> &#39;. “验证器”类型上不存在属性“0”<unknown[]> &#39; - Javascript (1)

📅  最后修改于: 2023-12-03 15:07:03.181000             🧑  作者: Mango

元素隐式具有“任何”类型的介绍

在 TypeScript 中,当你访问一个数组类型的值时,你可能会得到一些关于隐式使用“任何”类型的警告。

例如,在下面的代码中:

const validator: unknown[] = ['email', 'required'];
const value: unknown = 'example@test.com';

const isValid = validator[0](value); // 报错

我们会得到警告:

元素隐式具有“任何”类型,因为类型“0”的表达式不能用于索引类型“验证器”<unknown[]>。 “验证器”类型上不存在属性“0”<unknown[]>。你可以编写索引类型查询,并在其上接一个索引访问类型来获取有关此操作的更多信息。

这是因为数组类型默认具有“任何”类型元素,因此 TypeScript 无法确定数组中的元素类型,而其访问会触发警告。如果这个数组中的元素具有不同的类型,那么我们需要为每个元素分别指定类型。

解决这个问题的一种方法是使用 类型断言:

const validator: [(val: unknown) => boolean, string] = [(val) => (typeof val === 'string' && val.includes('@')), 'required'];
const value: unknown = 'example@test.com';

const isValid = validator[0](value); // 没有警告

在这个例子中,我们使用了一个元素是元组类型的数组,其中第一个元素是一个接受 unknown 类型参数、并返回一个 boolean 值的函数类型,第二个元素是一个字符串。这个类型告诉 TypeScript,这个数组中的每个元素的类型都是不同的。

总之,在 TypeScript 中,当你使用数组时,一定要记得为每个元素指定类型,以避免出现隐式使用“任何”类型的警告。