隐式具有 `any` 类型,因为索引表达式不是 'number'.ts7015 类型)

Implicitly has an `any` type becoz index expression is not of type 'number'.ts(7015)

我在 Angular 版本 12 中使用 Zxing 扫描仪组件。 我在很多地方都遇到过这个错误..

/**
 * Returns a valid BarcodeFormat or fails.
 */
private getBarcodeFormat(format: string | BarcodeFormat): BarcodeFormat {
  return typeof format === 'string'
    ? BarcodeFormat[format.trim().toUpperCase()]
    : format;
}

这一行有错误 [format.trim().toUpperCase()],当我悬停时它会显示 Element implicitly has an 'any' type because index expression is not of type 'number'.ts(7015)

为什么会出现这个错误??我该如何解决??

我需要一个完美的解决方案,无需更改 angular.jsonpackage.json[=15 中的任何配置=]

之所以会报错是因为format是一个字符串,可以是任意的,所以当你在BarcodeFormat中使用它的时候,typescript不知道format是否是一个BarcodeFormat.

的键数

因此,我们需要告诉 typescript format 实际上是 BarcodeFormat 中键的一部分。

为此,我们可以使用 keyof typeof 的组合来获取 BarcodeFormat 中的键并在 format.

上进行类型转换
private getBarcodeFormat(format: string | BarcodeFormat): BarcodeFormat {
    return typeof format === "string"
      ? BarcodeFormat[format.trim().toUpperCase() as keyof typeof BarcodeFormat]
      : format;
}

这里是codesandbox演示。