解决 元素隐式具有 “any“ 类型,因为类型为 “string“ 的表达式不能用于索引类型 “Object“。 在类型 “Object“ 上找不到具有类型为 “string“ 的参数的索引签名
2022-02-23 20:26:28
问题:
元素隐式具有 “any“ 类型,因为类型为 “string“ 的表达式不能用于索引类型 “Object“。 在类型 “Object“ 上找不到具有类型为 “string“ 的参数的索引签名
描述:
在写代码的时候,对一个对象做了一个for…in循环,然后取到了其每一个key对应的value值,但是写完之后发现Typescript报错了,错误内容就是如题,有点奇怪,特此去了解一下
for (const key in obejct) {
// 处理...
obejct[key]
解决:
原谅我报错都没有看明白,查了一下之后才知道,原来key值的类型不是string,在javascript中是默认给你转好的,而在Typescript中则不是,因此要么转,要么声明,要么忽略…
在tsconfig.json中compilerOptions里面新增忽略的代码,如下所示,添加后则不会报错
"suppressImplicitAnyIndexErrors": true
在定义的Interface里对其进行声明,如下所示,声明过后,也不会再报错
interface DAMNU_ENABLE {
[key: string]: boolean, // 字段扩展声明
[key: string]: boolean, // 字段扩展声明 声明之后可以用方括号的方式去对象里边的值
定义一个函数:isValidKey(),然后对需要使用到的地方进行一次判断
for (const key in obejct) {
if(isValidKey(key,obejct)){
// 处理...
obejct[key]
这三种方式都可以解决如题的报错信息,但是个人比较倾向于第二种或者第三种,并不是第一种不好,只是说,写第一种有一点点写any的感觉,不到万不得已不这么弄;
本文实例讲述了JavaScript强制类型转换和隐式类型转换。分享给大家供大家参考,具体如下:
在JavaScript中声明变量不需指定类型, 对变量赋值也没有类型检查,同时JavaScript允许隐式类型转换。这些特征说明JavaScript属于弱类型的语言。
(1).转换为字符串
转换为字符串是应用程序中的常见操作,javascript提供了toString方法。多数的JavaScript宿主环境(比如Node.js和Chrome)都提供了全局函数toString; 与此同时Object.prototype也定义了toString方法,使得所有对象都拥有转换为字符串的能力。
例如将一个Nu
在 tsconfig.json 文件中添加 ''suppressImplicitAnyIndexError'': true 规避错误。首先通过 typeof 操作符获取 Icons 变量的类型,然后通过 keyof 操作符获取该类型的所有键。在报错上一行添加 // @ts-ignore 规避掉 TS 的检查。
最近在前端项目中遇到在用字符串当对象的key时报错,报错信息如下:
“元素隐式具有 “any” 类型,因为类型为 “string” 的表达式不能用于索引类型”
在类型 XXX 上找不到具有类型为 “string” 的参数的索引签名。
搜索了一圈解决方案,没一个特别优雅的。
方案一,修改tsconfig
是修改tsconfig.json,加下面这行参数屏蔽检查,从而不报错。
"suppressImplicitAnyIndexErrors":true,
方案二,写一个函数转类型
export function
在tsconfig.json中compilerOptions里面新增忽略的代码,如下所示,添加后则不会报错
"suppressImplicitAnyIndexErrors": true
类型断言
const values = data.map((item) => Number(item[column.property as keyof typeof item]));
const values = data.map((item) => Number(item[column.property
TypeScript报错:ts(2683)"this" 隐式具有类型 "any",因为它没有类型注释。ts(7009)其目标缺少构造签名的 "new" 表达式隐式具有 "any" 类型。
import * as antIcons from "@ant-design/icons-vue";
export function setupAntdIcon(app: App<Element>): void {
// 注册组件
Object.keys(antIcons).forEach((key) => {
app.component(key, antIcons[key]);