为了账号安全,请及时绑定邮箱和手机立即绑定

typescript报错,类型{}不存在属性,这是为什么?

typescript报错,类型{}不存在属性,这是为什么?

喵喔喔 2019-11-02 13:29:54
在调取api的时候不知道为什么一直报错无法获取到对应的方法,代码如下///apis/index.tsletapis={};constapiContext=require.context("./",true,/\.ts$/);apiContext.keys().forEach(api=>{if(api.startsWith("./index"))return;constapiModule=apiContext(api);apis={...apis,...(apiModule.default||apiModule)};});exportdefaultapis;///store/modules/side.ts@ModuleexportdefaultclassAsideextendsVuexModule{menuList=[];@Mutation[GET_MENU_LIST](payload:any):void{this.menuList=payload;}@Action({commit:GET_MENU_LIST})asyncgetMenuList(){returnawaitapis.getMenuList();}}就是这行apis.getMenuList()报错,Member'getMenuList'implicitlyhasan'any'type,vscode提示类型“{}”上不存在属性“getMenuList”。我打印了下apis.getMenuList是个function用来获取接口数据没看出啥问题
查看完整描述

2 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

你这也压根没声明啊……既然用了TS就按TS的要求来,咋还TS还原生JS混用呢?
简单粗暴的方法就是忽略这个错误,在tsconfig.json里:
{
...
"compilerOptions":{
...
"noImplicitAny":false,//设成false
}
...
}
                            
查看完整回答
反对 回复 2019-11-02
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

因为你在最开始定义了letapis={};,ts会自动识别你的apis是一个空的object,并且没有任何东西。所以你在后面想要调用getMenuList的时候TS认为apis里面并不存在你要调用的方法。对于这种动态object,解决办法是手动声明类型letapis:{getMenuList?:Function}={};,在调用的时候用if检查getMenuList是否存在
                            
查看完整回答
反对 回复 2019-11-02
  • 2 回答
  • 0 关注
  • 9377 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号