c语言编程笔录

首页 >   > 笔记大全

笔记大全

VUE3TS获取组件类型遇到的坑怎么解决

更新时间:2023-12-02
段落一:需求背景及遇到的坑 在开发VUE3+TS项目时,经常需要获取组件的类型,然而在实际操作中,我们会遇到一些坑。例如: ```typescript import { defineComponent } from 'vue' export default defineComponent({ name: 'MyComponent', setup() { const test = { a: 1, b: 'hello' } console.log(typeof test) // object console.log(Object.prototype.toString.call(test)) // [object Object] console.log(test.constructor.name) // Object return { test } } }) ``` 这份代码,如果我们想获取test变量的类型,我们会尝试三种方式:typeof、Object.prototype.toString.call()和constructor.name。但是,这三种方式都只能返回`object`或`Object`而无法返回更加具体的类型,这就遇到了一个坑。 段落二:解决方案 为了解决这个坑,我们可以借助typescript的语法特性,使用`类型`来标注变量的类型。 例如: ```typescript interface Test { a: number; b: string; } export default defineComponent({ name: 'MyComponent', setup() { const test: Test = { a: 1, b: 'hello' } console.log(test)// { a: 1, b: 'hello' } console.log(typeof test) // object console.log(Object.prototype.toString.call(test)) // [object Object] console.log(test.constructor.name) // Object return { test } } }) ``` 在这里,我们定义了一个类型Test,它有两个属性:a和b,一个数字类型,一个字符串类型。然后,我们在使用test变量时直接标注Test类型,这样我们就可以获取到更具体的类型了。 段落三:使用Vue提供的独立类型 除了手动定义类型,我们也可以使用Vue提供的独立类型,例如: ```typescript import { defineComponent , PropType} from 'vue' interface Test { a: number; b: string; } export default defineComponent({ name: 'MyComponent', props: { test: { type: Object as PropType, default: () => ({ a: 1, b: 'hello' }) } }, setup(props) { console.log(props.test) // { a: 1, b: 'hello' } console.log(typeof props.test) // object console.log(Object.prototype.toString.call(props.test)) // [object Object] console.log(props.test.constructor.name) // Object return { test: props.test } } }) ``` 在这里,我们使用了Vue提供的`PropType`类型,来标注test的类型。这样,在使用props.test时就可以获取到更加具体的类型了。 段落四:总结 总之,在开发VUE3+TS项目时,需要获取组件类型时,我们可以手动定义类型或者使用Vue提供的`PropType`类型,这样就可以解决我们在实际操作中遇到的坑了。