typescript如何解决对象动态获取属性并调用方法的类型定义?

作者站长头像
站长
· 阅读数 5

如题demo 如下:

var obj = {
    aaa:{
        init:function(){
            console.log('aaa')
        }
     },
     bbb:{
        init:function(){
            console.log('bbb')
        }
     }
}
function fn(type:string){
    obj[type].init()
}
fn('ccc')

报错 类型“("string")[]”上不存在属性“init”如何定义类型,可以保证这里正常调用?

回复
1个回答
avatar
test
2024-06-25

可以通过 typeof 获取对象 obj 的类型,再通过 keyof 获取 obj 类型中所有 key 的集合,进而确认 obj[type] 的类型。

var obj = {
  aaa: {
    init: function () {
      console.log("aaa");
    },
  },
  bbb: {
    init: function () {
      console.log("bbb");
    },
  },
};
function fn(type: keyof typeof obj) {
  obj[type].init();
}
fn("aaa");

希望有所帮助!

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容