Vue 3 引入了 Composition API、更好的性能优化 和 更灵活的组合逻辑,而 TypeScript 提供了 静态类型检查、更好的代码提示 和 更健壮的代码维护能力。结合二者可以显著提升开发效率和代码质量。
npm create vue@latest my-vue-app -- --template vue-ts
cd my-vue-app
npm install
npm run dev
src/
├── components/
├── App.vue
├── main.ts
└── vite-env.d.ts
tsconfig.json
确保 tsconfig.json
包含 Vue 3 相关配置:
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"strict": true,
"jsx": "preserve",
"moduleResolution": "node",
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}
{{ title }}
Count: {{ count ?? 0 }}
Active!
ref
和 reactive
// src/composables/useCounter.ts
import { ref } from 'vue';
export function useCounter(initialValue = 0) {
const count = ref(initialValue);
const increment = () => count.value++;
const decrement = () => count.value--;
return { count, increment, decrement };
}
const fetchData = async <T>(url: string): Promise<T> => {
const res = await fetch(url);
return res.json();
};
const user = await fetchData<{ name: string }>('/api/user');
// src/router/index.ts
import { createRouter, createWebHistory } from 'vue-router';
const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '/',
name: 'Home',
component: () => import('@/views/Home.vue'),
},
{
path: '/user/:id',
name: 'User',
component: () => import('@/views/User.vue'),
props: (route) => ({ id: Number(route.params.id) }),
},
],
});
export default router;
// src/stores/counter.ts
import { defineStore } from 'pinia';
export const useCounterStore = defineStore('counter', {
state: () => ({
count: 0,
}),
actions: {
increment() {
this.count++;
},
},
getters: {
doubleCount: (state) => state.count * 2,
},
});
Double: {{ counter.doubleCount }}
.vue
文件类型检查报错?在 vite-env.d.ts
中添加:
///
declare module '*.vue' {
import type { DefineComponent } from 'vue';
const component: DefineComponent<{}, {}, any>;
export default component;
}
// src/main.ts
import { createApp } from 'vue';
import App from './App.vue';
const app = createApp(App);
// 自动注册全局组件
const modules = import.meta.glob('./components/**/*.vue');
for (const path in modules) {
const name = path.match(/\/([^\/]+)\.vue$/)?.[1];
if (name) {
app.component(name, defineAsyncComponent(modules[path]));
}
}
app.mount('#app');
如果你正在开发大型前端应用,Vue 3 + TypeScript 是最佳选择!
进一步阅读:
希望这篇指南对你有帮助!如果有问题,欢迎留言讨论。