在Vue 3中使用TypeScript可以提高代码的可读性和可维护性,避免一些常见的类型错误。以下是一些高级用法示例,展示如何结合Vue 3和TypeScript的强大功能。
1. 使用 defineComponent 和 类型注解
使用 defineComponent 可以帮助TypeScript更好地推断组件的类型。
import {
defineComponent, PropType } from 'vue';
interface User {
id: number;
name: string;
}
export default defineComponent({
name: 'UserProfile',
props: {
user: {
type: Object as PropType<User>,
required: true,
},
},
setup(props) {
// TypeScript 知道 props.user 的类型是 User
console.log(props.user.name);
return {
};
},
});
2. 使用 ref 和 reactive 的类型
当使用 ref 和 reactive 时,可以明确指定其类型以获得更好的类型检查和自动完成。
import {
ref, reactive } from 'vue';
const count = ref<number>(0);
const user = reactive<{
id: number; name: string }>({
id: 1, name: 'John Doe' });
// 使用时,TypeScript 知道 count 是 number,user 是一个具有 id 和 name 的对象
count.value++;
console.log(user.name);
3. 类型安全的事件处理
定义事件处理函数的类型,以确保事件参数的类型安全。
import {
defineComponent } from 'vue';
export default defineComponent({
name: 'CustomButton',
emits: {
click: (event: MouseEvent) => true,
},
setup(props, {
emit }) {
const handleClick = (event: MouseEvent) => {
emit('click', event);
};
return {
handleClick };
},
});
4. 使用组合式 API 和类型
使用组合式 API 时,可以利用类型来明确定义返回的属性和方法。
import {
ref, defineComponent } from 'vue';
function useCounter() {
const count = ref(0);
const increment = () => {
count.value++;
};
return {
count,
increment,
};
}
export default defineComponent({
name: 'CounterComponent',
setup() {
const {
count, increment } = useCounter();
return {
count, increment };
},
});
5. 类型安全的依赖注入
使用 provide 和 inject 时,可以利用类型来确保注入的值类型安全。
import {
provide, inject, defineComponent } from 'vue';
const UserSymbol = Symbol('User');
interface User {
id: number;
name: string;
}
export default defineComponent({
name: 'ParentComponent',
setup() {
const user: User = {
id: 1, name: 'John Doe' };
provide(UserSymbol, user);
return {
};
},
});
export default defineComponent({
name: 'ChildComponent',
setup() {
const user = inject<User>(UserSymbol);
if

最低0.47元/天 解锁文章
6006

被折叠的 条评论
为什么被折叠?



