解决 元素隐式具有 “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,
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