Vue+TypeScript项目切换组件报payload隐式any类型错误如何解决?
问题原因
这个报错是TypeScript的类型校验触发的:你没有给changeComponent的入参payload定义明确的类型,TS默认会将其判定为any类型,当你开启了noImplicitAny校验规则时就会抛出该错误。
解决方法
按优先级从高到低提供可选方案:
- 方案1:显式定义
payload的类型(推荐,保留TS类型安全能力)
先定义入参的接口类型,再给参数加类型注解:// 可根据你实际业务中componentName的取值调整类型,比如固定枚举值可以写成 'UserList' | 'Setting' 联合类型,校验更严格 interface ComponentChangePayload { componentName: string } // Options API 写法 methods: { changeComponent(payload: ComponentChangePayload) { this.componentName = payload.componentName; } } // Vue3 <script setup lang="ts"> 写法 const changeComponent = (payload: ComponentChangePayload) => { componentName.value = payload.componentName } - 方案2:显式声明
payload为any类型(临时过渡用,不推荐)
不需要定义类型,直接给参数加any注解即可绕过校验:methods: { changeComponent(payload: any) { this.componentName = payload.componentName; } } - 方案3:关闭
noImplicitAny校验(非常不推荐,会丢失TS大部分类型保护能力)
找到项目根目录的tsconfig.json,将compilerOptions下的noImplicitAny设置为false即可全局关闭隐式any的报错。
内容的提问来源于stack exchange,提问作者roxena
相关产品推荐
相关产品推荐

