Vue3.3传递Ref对象给Axios报IFilter类型不匹配错误
解决Vue3.3 TypeScript项目中Ref对象传递给Axios接口的类型错误
错误原因
用ref<IFilter>声明的变量f是Ref包装对象,而api.getAll的第三个参数要求的是原始IFilter类型值。Ref对象本身仅包含value属性,不存在IFilter定义的all、beginner等字段,直接传递会触发类型不匹配报错。
解决方案
直接传递Ref的
value属性
调用接口时传入f.value,这是最直接的解决方式,因为f.value就是符合IFilter类型的原始值:api.getAll(1, 6, f.value)确保Ref初始值符合
IFilter结构
定义f时初始化所有IFilter要求的属性,避免类型推断异常:const f = ref<IFilter>({ all: false, beginner: false, // 补充IFilter的其他必填属性 })配合上一种方式传递
f.value,就能彻底解决类型问题。使用Vue的
unref工具函数解包
若不确定参数是否为Ref对象,可使用unref自动解包(Ref对象返回value,原始值直接返回):import { unref } from 'vue' api.getAll(1, 6, unref(f))
内容的提问来源于stack exchange,提问作者Mike3355
相关产品推荐
相关产品推荐

