如何定义Vue中app.mount()方法的返回值类型?
Vue3 + TypeScript 多实例挂载后访问暴露属性的类型问题解决
问题根源:createApp(component).mount()返回的默认类型ComponentPublicInstance仅包含Vue内置的实例属性/方法,不会自动识别你通过defineExpose暴露的自定义属性,因此TypeScript会提示content不存在。
以下是两种可行的解决方式:
方法一:自动推导组件实例类型
通过typeof获取组件的类型,再用InstanceType提取对应的实例类型,最后通过类型断言指定挂载后的实例类型:
// main.ts import myComponent from './myComponent.vue' import type { InstanceType } from 'vue' // 推导组件的实例类型 type MyComponentInstance = InstanceType<typeof myComponent> // 断言挂载结果为该实例类型 const tooltipInstance = createApp(myComponent).mount('#v-tooltip') as MyComponentInstance tooltipInstance.content = 'xxx' // TypeScript可正常识别属性
方法二:手动定义暴露属性接口
如果需要更清晰地声明暴露的属性,可以手动定义接口,再与Vue内置的ComponentPublicInstance类型合并:
// main.ts import myComponent from './myComponent.vue' import type { ComponentPublicInstance, Ref } from 'vue' // 定义组件暴露的属性接口 interface MyComponentExposed { content: Ref<string> } // 合并内置实例类型与自定义暴露属性类型 const tooltipInstance = createApp(myComponent).mount('#v-tooltip') as ComponentPublicInstance & MyComponentExposed tooltipInstance.content = 'xxx' // 无类型报错
内容的提问来源于stack exchange,提问作者MrNobody
相关产品推荐
相关产品推荐

