📅  最后修改于: 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 中,当你使用数组时,一定要记得为每个元素指定类型,以避免出现隐式使用“任何”类型的警告。