如何解决 TypeScript 中 Type 'X' cannot be used as an index type 错误
当我们尝试使用不能用于索引数组或对象的类型时,会出现错误“Type cannot be used as an index type”,例如 非原始类型之一,如 String
。 要解决错误,需要使用原始(小写)类型,例如 键入值时的 number
或 string
。
下面是产生上述错误的一个示例。
// ✅ With arrays (should be `number`)
const num: Number = 1;
const arr = ['a', 'b', 'c'];
// ⛔️ Error: Type 'Number' cannot be used as an index type.ts(2538)
arr[num]
// ✅ With objects
const obj = {
0: 'a',
1: 'b',
2: 'c',
};
// 👇️ should be `number`
const num2: Number = 2;
// ⛔️ Error: Type 'Number' cannot be used as an index type.ts(2538)
obj[num2]
我们使用 Number
,非原始对象类型来键入 num 和 num2 变量,这导致了错误。
我们不能使用非原始类型,如
Number
、String
、Boolean
或Object
作为索引类型。
要解决该错误,需要始终改用 number, string, boolean, Record 类型。
// 👇️ now using number (lowercase n)
const arr1: number[] = [0, 1, 2];
const arr2 = ['a', 'b', 'c'];
console.log(arr2[arr1[0]]); // 👉️ "a"
我们使用了解决错误的原始数字类型。
错误是因为原始数字、字符串和布尔类型与非原始数字、字符串、布尔、对象等类型之间存在差异。
非基本类型是对象,在 TypeScript 中键入值时不应使用。
TypeScript 最佳实践文档警告在 TypeScript 代码中键入值时切勿使用
Number
、String
、Boolean
、Symbol
或Object
非原始对象。
相反,我们应该使用 number, string, boolean, symbol 和 Record 类型。
该错误消息意味着您在尝试在 TypeScript 中索引数组或对象时无法使用指定的类型。
这是错误如何发生的另一个示例。
interface Person {
key: String; // 👈️ should be string
}
const obj1: Person = {
key: 'name',
};
const obj2 = {
name: 'John Smith',
};
// ⛔️ Error: Type 'String' cannot be used as an index type.ts(2538)
obj2[obj1.key]
上面的代码片段显示了使用 String
非基本对象类型如何导致错误,因为它不能用于在特定属性处索引对象。
interface Person {
key: string; // 👈️ using primitive type
}
const obj1: Person = {
key: 'name',
};
const obj2 = {
name: 'John Smith',
};
// ✅ Works
console.log(obj2[obj1.key as keyof typeof obj2]); // 👉️ "John Smith"
使用字符串原始类型解决了这个问题。
当我们尝试将 String
类型的值分配给 string 类型的值时,会显示错误原因。
const str1: String = 'hello world';
// ⛔️ Error: Type 'String' is not
// assignable to type 'string'.
// 'string' is a primitive, but 'String'
// is a wrapper object. Prefer using 'string' when possible.
const str2: string = str1;
String
、Number
、Boolean
、Symbol
和Object
等大写非原始对象不等同于 string、number、boolean 等。
确保始终使用数字、字符串、布尔值、符号和记录。
总结
当我们尝试使用不能用于索引数组或对象的类型时,会出现错误“Type cannot be used as an index type”,例如 非原始类型之一,如 String
。 要解决错误,请使用原始(小写)类型,例如 键入值时的 number
或 string
。。
相关文章
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 Angular 中使用 TypeScript 的 getElementById 替换
发布时间:2023/04/14 浏览次数:153 分类:Angular
-
本教程指南提供了有关使用 TypeScript 在 Angular 中替换 document.getElementById 的简要说明。这也提供了在 Angular 中 getElementById 的最佳方法。
在 TypeScript 中使用 try..catch..finally 处理异常
发布时间:2023/03/19 浏览次数:181 分类:TypeScript
-
本文详细介绍了如何在 TypeScript 中使用 try..catch..finally 进行异常处理,并附有示例。
在 TypeScript 中使用 declare 关键字
发布时间:2023/03/19 浏览次数:97 分类:TypeScript
-
本教程指南通过特定的实现和编码示例深入了解了 TypeScript 中 declare 关键字的用途。
在 TypeScript 中 get 和 set
发布时间:2023/03/19 浏览次数:172 分类:TypeScript
-
本篇文章演示了类的 get 和 set 属性以及如何在 TypeScript 中实现它。
在 TypeScript 中格式化日期和时间
发布时间:2023/03/19 浏览次数:161 分类:TypeScript
-
本教程介绍内置对象 Date() 并讨论在 Typescript 中获取、设置和格式化日期和时间的各种方法。
在 TypeScript 中返回一个 Promise
发布时间:2023/03/19 浏览次数:182 分类:TypeScript
-
本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。
在 TypeScript 中定义函数回调的类型
发布时间:2023/03/19 浏览次数:221 分类:TypeScript
-
本教程说明了在 TypeScript 中为函数回调定义类型的解决方案。为了程序员的方便和方便,实施了不同的编码实践指南。
在 TypeScript 中把 JSON 对象转换为一个类
发布时间:2023/03/19 浏览次数:110 分类:TypeScript
-
本教程演示了如何将 JSON 对象转换为 TypeScript 中的类。