添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
解决 元素隐式具有 “any“ 类型,因为类型为 “string“ 的表达式不能用于索引类型 “Object“。 在类型 “Object“ 上找不到具有类型为 “string“ 的参数的索引签名 2021-11-10 13:47:59

问题: 元素隐式具有 “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, // 字段扩展声明 声明之后可以用方括号的方式去对象里边的值
  • 方案三:对其使用keyof进行判断
export function isValidKey(
    key: string | number | symbol,
    object: object
): key is keyof typeof object {
    return key in object;

定义一个函数:isValidKey(),然后对需要使用到的地方进行一次判断

for (const key in obejct) {
	if(isValidKey(key,obejct)){
		// 处理...
		obejct[key]
		....

这三种方式都可以解决如题的报错信息,但是个人比较倾向于第二种或者第三种,并不是第一种不好,只是说,写第一种有一点点写any的感觉,不到万不得已不这么弄;

在 tsconfig.json 文件中添加 ''suppressImplicitAnyIndexError'': true 规避错误。首先通过 typeof 操作符获取 Icons 变量的类型,然后通过 keyof 操作符获取该类型的所有键。在报错上一行添加 // @ts-ignore 规避掉 TS 的检查。 最近在前端项目中遇到在用字符串当对象的key时报错,报错信息如下: “元素隐式具有 “any” 类型,因为类型为 “string” 的表达式不能用于索引类型” 在类型 XXX 上不到具有类型为 “string” 的参数索引签名。 搜索了一圈解决方案,没一个特别优雅的。 方案一,修改tsconfig 是修改tsconfig.json,加下面这行参数屏蔽检查,从而不报错。 "suppressImplicitAnyIndexErrors":true, 方案二,写一个函数转类型 export function 使用typescript来进行类型定义和约束时,经常会出现类似报错:元素隐式具有“any”类型,因为“string类型表达式不能用于索引类型; 如:定义一个请求方式与对应的className的字典映射 const methodMap = { GET: style["get"], POST: style["post"], PUT: style["put"], PATCH: style["patch"], DELETE: style["delete"] 本文实例讲述了JavaScript强制类型转换和隐式类型转换。分享给大家供大家参考,具体如下: 在JavaScript中声明变量不需指定类型, 对变量赋值也没有类型检查,同时JavaScript允许隐式类型转换。这些特征说明JavaScript属于弱类型语言。 (1).转换为字符串 转换为字符串是应用程序中的常见操作,javascript提供了toString方法。多数的JavaScript宿主环境(比如Node.js和Chrome)都提供了全局函数toString; 与此同时Object.prototype也定义了toString方法,使得所有对象都拥有转换为字符串的能力。 例如将一个Nu export function isValidKey(key: string | number | symbol, object: object): key is keyof typeof object { return key in object; 最近在构建一个typescript项目时如下代码在项目框架里vscode报错元素隐式具有 "any" 类型,因为类型“Shared”没有索引签名;很有意思的是当我们单独的把这段代码里单独写一个a.ts,则vscode不会报错; 在搜索网上资料及自己尝试后,到了几个有意思的解决方法。class Shared { get( key: string ) { return t... ts7053: 元素隐式具有 “any” 类型,因为类型为 “any” 的表达式不能用于索引类型 “{ xxx: xxx; }”。 在React-Typescript中遇到的问题,网上大部分都是修改配置什么的,我这里是加了个判断。 下面的TypeScript函数用于判断key是否存在对象类型中 export function isValidKey(key: string, object: object): key is keyof typeof object { return key in o