📌  相关文章
📜  元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“{}”.在类型“{}”.ts(7053) 上找不到具有“字符串”类型参数的索引签名 - Javascript (1)

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

什么是“元素隐式具有“任何”类型”?

“元素隐式具有‘任何’类型”是 TypeScript 中的一种机制,它允许数组或对象的元素或属性不必指定类型,而是默认为“任何”类型。这意味着这些元素或属性可以是任何类型。

为什么会出现“元素隐式具有“任何”类型”?

当我们定义一个数组或一个对象时,如果我们没有为元素或属性指定类型,TypeScript 编译器会默认将它们设置为“任何”类型。这是为了方便程序员在使用数组或对象时不必每个元素或属性都指定类型。

为什么“字符串”类型的表达式不能用于索引类型“{}”?

在 TypeScript 中,如果我们使用对象作为索引类型,例如:

let myObj: { [key: string]: number } = { a: 1, b: 2, c: 3 };

我们必须使用字符串类型的键来访问对象的属性。如果我们尝试使用数字类型的键访问对象的属性,TypeScript 将会报错,提示“索引类型为字符串”。

myObj[0] // Error: Index signature is missing in type '{ a: number; b: number; c: number; }'.
如何解决“字符串”类型的表达式不能用于索引类型“{}”的问题?

要解决这个问题,我们需要为对象中的每个属性都指定类型。例如:

let myObj: { [key: string]: number } = { a: 1, b: 2, c: 3 };

这样,我们就可以使用字符串类型的键来访问对象的属性了:

myObj['a'];
总结

“元素隐式具有‘任何’类型”是 TypeScript 中的一个机制,可以方便程序员在使用数组或对象时不必每个元素或属性都指定类型。但是要注意,如果我们使用对象作为索引类型,就需要为每个属性指定类型,否则会出现“字符串”类型的表达式不能用于索引类型“{}”的问题。