TypeScript TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'

阅读时长 4 分钟读完

在使用 TypeScript 进行开发时,我们可能会遇到 "TS7015" 错误,该错误消息通常是指在使用索引数组时没有正确地定义索引类型,从而导致出现隐式的 any 类型。这种错误非常常见,本文将详细介绍如何解决这个问题。

什么是 TS7015 错误?

TS7015 是 TypeScript 中的一个常见错误,其错误信息为:

该错误通常与使用索引访问数组或对象属性相关,但未正确定义索引类型。因此,在编译时,TypeScript 无法确定要访问的属性或元素的类型,并标记它们为 any 类型。

如何解决 TS7015 错误

定义索引类型

要解决 TS7015 错误,最简单的方法是为数组或对象定义一个索引类型。例如,如果你有一个名为 myArray 的数组,你可以为它定义一个索引类型,如下所示:

当然,如果数组中的元素类型不是 number,那么你需要相应地更改索引类型。

对于对象,你也可以定义一个索引类型,如下所示:

在这个示例中,我们定义了一个名为 MyObject 的接口,它可以包含任何字符串键和对应的数字值。然后,在代码中,我们使用了一个字符串类型的变量 myKey 作为对象属性的索引。

明确定义 any 类型

如果你无法为数组或对象定义索引类型,那么你需要明确地指定要访问的属性或元素的类型,而不是让 TypeScript 隐式地将它们标记为 any。

例如,如果你有一个名为 myArray 的数组,但是不知道它的元素类型是什么,你可以明确地指定它们为 any 类型,如下所示:

在这个示例中,我们将 myArray 的类型定义为 any[] 而不是具体的类型,因为我们不知道它包含什么类型的元素。然后,我们使用一个 any 类型的变量 myArrayItem 来存储我们从数组中获取的元素。

对于对象也是类似的处理方法,直接使用 any 类型的变量即可。

示例代码

下面是一个使用 TypeScript 的示例代码,它演示了如何解决 TS7015 错误:

-- -------------------- ---- -------
--------- -------- -
  ----- -------- -------
-

----- -------- -------- - --- -- ---
----- --------- -------- - - ---- -- ---- - --

-- ------
----- ------------- ------ - --
----- ----------- - ----------------------

----- ------------ ------ - ------
----- ------------ - ----------------------

-- ---- --- --
----- ----------- ----- - --- ------ ------
----- ---------------- ------ - --
----- --------------- --- - ----------------------------

----- ------------ --- - - ---- -- ---- ----- --
----- --------------- ------ - ------
----- ---------------- --- -

- ------------------------------------------------------------------------------ --------
------------------------------------------------------------------------------------------------------------------------
纠错
反馈