相关文章推荐

最近在前端项目中遇到在用字符串当对象的key时报错,报错信息如下:
“元素隐式具有 “any” 类型,因为类型为 “string” 的表达式不能用于索引类型”
在类型 XXX 上找不到具有类型为 “string” 的参数的索引签名。

搜索了一圈解决方案,没一个特别优雅的。

方案一,修改tsconfig

是修改tsconfig.json,加下面这行参数屏蔽检查,从而不报错。

"suppressImplicitAnyIndexErrors":true,

方案二,写一个函数转类型

export function isValidKey(key: string | number | symbol , object: object): key is keyof typeof object {
  return key in object;
for (const key in obejct) {
	if(isValidKey(key,obejct)){
		// 处理...
		obejct[key]
		....

以上两种特别不优雅,非常不喜欢。在此我写一个比较优雅可靠的解决方法。

方案三:定义一个string作为key的类型

type stringKey = Record<string, boolean>
const accessDict: stringKey = {
    create: false,  // 创建
    receive: false,  // 接收
 for (const i of AccessList) {
      accessDict[i.authName] = true

写一个类型,表明key是字符串,value要看各位自己的需要定义。
我的项目中value是boolean,所以写boolean。

后面再用字符串当key遍历对象,typescript就不会报错了!
当然,如果仅仅为了解决报错,不用额外写一个类型,直接给变量注明类型即可:

const accessDict: Record<string, boolean> = {
    create: false,  // 创建
    receive: false,  // 接收
 for (const i of AccessList) {
      accessDict[i.authName] = true

遍历特定类型的对象

假定有一个对象类型如下:

type Count = {
    receive: number  // 待接收数
    update: number  // 待更正数
    conduct: number  // 待处理数
    finish: number  // 待销单数
    check: number  // 待审核数
    notice: number  // 待签到通知

现在有这样一个需求,统计该类型的对象中有几个属性的值大于0

const test: Count = {
    receive: 1,
    update: 2,
    conduct: 0,
    finish: 1,
    check: 3,
    notice: 0,

那么该怎么写代码比较优雅呢?逐个写if语句判断有点傻,直接for in循环会报错!
typescript比较优雅的写法如下:

let cnt = 0
let key: keyof Count
for (key in test) {
     if (test[key] > 0) {
         cnt += 1
                    最近在前端项目中遇到在用字符串当对象的key时报错,报错信息如下:“元素隐式具有 “any” 类型,因为类型为 “string” 的表达式不能用于索引类型”在类型 XXX 上找不到具有类型为 “string” 的参数的索引签名。搜索了一圈解决方案,没一个特别优雅的。方案一,修改tsconfig是修改tsconfig.json,加下面这行参数屏蔽检查,从而不报错。"suppressImplicitAnyIndexErrors":true,方案二,写一个函数转类型export function
				
问题: 元素隐式具有 “any“ 类型,因为类型为 “string“ 的表达式不能用于索引类型 “Object“。 在类型 “Object“ 上找不到具有类型为 “string“ 的参数的索引签名 描述: 在写代码的时候,对一个对象做了一个for…in循环,然后取到了其每一个key对应的value值,但是写完之后发现Typescript报错了,错误内容就是如题,有点奇怪,特此去了解一下 for (const key in obejct) { // 处理... obejct[key] 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]); 在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
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
一、场景:中括号读取对象中值的时候报错:【类型String不能作为索引类型使用】、切换成any 之后【元素隐式具有 “any” 类型,因为类型为 “any” 的表达式不能用于索引类型 “attr_type”。】 二、查阅资料 有说在tsconfig中配置suppressImplicitAnyIndexErrors-true的【亲测无效】、 最后通过 keyof typeof 完美解决。 三、解决办法 使用 keyof typeof
这是学习 的基础进阶的第三章节,我将会把我学习到的知识总结起来供大家参考。之前已经学习了泛型的基本用法,接下来我们拓展一下对于泛型的其他知识点。在 TypeScript 2.8 中引入了条件类型,使得我们可以根据某些条件得到不同的类型,这里所说的条件是类型兼容性约束。尽管以上代码中使用了 关键字,也不一定要强制满足继承关系,而是检查是否满足结构兼容性。条件类型有点类似三元表达式,根据真假从而在两种类型中选择其一: 上述代码的意思是:若 能够赋值给 ,那么类型是 ,否则为 。在 中, 操作符可以用来
export function isValidKey(key: string | number | symbol, object: object): key is keyof typeof object { return key in object; typescript报错:类型“ReactNode”的参数不能赋给类型“ReactElement<any, string | JSXElementConstructor<any>>”的参数,如何解决?
 
推荐文章