Vue3 是 Vue.js 框架的最新版本,带来了许多新特性和改进,如组合式 API、TypeScript 支持、性能优化等。TypeScript 是一种静态类型检查语言,可以提高代码的可维护性和可靠性。本文将详细介绍如何使用 Vue3 + TypeScript 构建现代化的前端应用,包括项目初始化、组件设计、状态管理、路由配置、API 调用等方面的实战经验。
Vue3 + TypeScript 项目实战
项目初始化
使用 Vue CLI 或 Vite 可以快速初始化一个 Vue3 + TypeScript 项目。
1. 使用 Vite 初始化项目
Vite 是一个现代化的前端构建工具,提供了更快的开发体验。使用 Vite 初始化 Vue3 + TypeScript 项目的命令如下:
npm create vite@latest my-vue3-ts-app -- --template vue-ts
cd my-vue3-ts-app
npm install
2. 项目结构
初始化完成后,项目结构如下:
├── public/ # 静态资源
├── src/ # 源代码
│ ├── assets/ # 资源文件
│ ├── components/ # 组件
│ ├── router/ # 路由
│ ├── store/ # 状态管理
│ ├── views/ # 页面
│ ├── App.vue # 根组件
│ ├── main.ts # 入口文件
│ ├── env.d.ts # 环境变量类型声明
│ └── vite-env.d.ts # Vite 环境类型声明
├── index.html # HTML 入口
├── package.json # 项目配置
├── tsconfig.json # TypeScript 配置
├── tsconfig.node.json # Node 环境 TypeScript 配置
└── vite.config.ts # Vite 配置
组件设计
Vue3 组件可以使用选项式 API 或组合式 API 编写。组合式 API 提供了更好的 TypeScript 支持和更灵活的代码组织方式。
1. 组件基本结构
一个基本的 Vue3 + TypeScript 组件结构如下:
<template>
<div class="hello">
<h1>{{ msg }}</h1>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
interface Props {
msg: string
}
const props = defineProps<Props>()
const count = ref(0)
</script>
<style scoped>
.hello {
font-size: 1.5rem;
}
</style>
2. 组件通信
Vue3 组件通信方式包括:
- Props:父组件向子组件传递数据
- Emits:子组件向父组件传递事件
- Provide/Inject:祖先组件向后代组件传递数据
- 状态管理:使用 Pinia 或 Vuex 管理全局状态
3. 组件样式
Vue3 组件样式可以使用 scoped 或 CSS Modules,以避免样式冲突。
路由配置
Vue3 推荐使用 Vue Router 4 进行路由管理。
1. 安装 Vue Router
npm install vue-router@4
2. 配置路由
在 src/router/index.ts 文件中配置路由:
import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/',
name: 'home',
component: HomeView
},
{
path: '/about',
name: 'about',
// 懒加载组件
component: () => import('../views/AboutView.vue')
}
]
})
export default router
3. 路由守卫
Vue Router 提供了全局守卫、路由守卫和组件守卫,可以用于权限控制、页面跳转控制等。
状态管理
Vue3 推荐使用 Pinia 进行状态管理,Pinia 提供了更好的 TypeScript 支持和更简单的 API。
1. 安装 Pinia
npm install pinia
2. 配置 Pinia
在 main.ts 文件中配置 Pinia:
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'
const app = createApp(App)
app.use(createPinia())
app.use(router)
app.mount('#app')
3. 创建 Store
在 src/store 目录下创建 store 文件:
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', () => {
const count = ref(0)
const doubleCount = computed(() => count.value * 2)
function increment() {
count.value++
}
return {
count,
doubleCount,
increment
}
})
API 调用
在 Vue3 + TypeScript 项目中,可以使用 Axios 进行 API 调用。
1. 安装 Axios
npm install axios
2. 配置 Axios
创建一个 axios 实例,配置基础 URL、超时时间、请求拦截器和响应拦截器:
import axios from 'axios'
const apiClient = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL,
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
})
// 请求拦截器
apiClient.interceptors.request.use(
config => {
// 添加 token 等认证信息
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
error => {
return Promise.reject(error)
}
)
// 响应拦截器
apiClient.interceptors.response.use(
response => {
return response.data
},
error => {
// 处理错误
return Promise.reject(error)
}
)
export default apiClient
3. 使用 Axios 调用 API
在组件或 store 中使用 apiClient 调用 API:
import apiClient from '../utils/apiClient'
// 获取用户列表
export const getUsers = async () => {
return await apiClient.get('/users')
}
// 创建用户
export const createUser = async (user: User) => {
return await apiClient.post('/users', user)
}
构建与部署
使用 Vite 构建 Vue3 + TypeScript 项目非常简单。
1. 构建项目
npm run build
2. 部署项目
构建完成后,可以将 dist 目录部署到任何静态文件服务器上,如 Nginx、Apache、Netlify、Vercel 等。
3. CI/CD 配置
可以使用 GitHub Actions、GitLab CI 等工具配置 CI/CD 流程,实现自动构建和部署。
总结
Vue3 + TypeScript 是构建现代化前端应用的强大组合,提供了更好的开发体验、更强的类型安全性和更高的性能。本文介绍了使用 Vue3 + TypeScript 构建项目的各个方面,包括项目初始化、组件设计、路由配置、状态管理和 API 调用等。
通过学习和实践这些知识,你可以构建出高质量、可维护、可扩展的 Vue3 + TypeScript 应用。希望本文对你有所帮助!