推荐使用npm create vite@latest my-app -- --template vue-ts一键创建vue3+typescript项目,vite模板已预置strict: true的tsconfig.json,确保类型安全底线;组件中通过defineprops、defineemits、ref等显式标注类型,配合路径别名与env.d.ts声明实现全链路类型推导与校验。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要用 TypeScript 为 Vue 项目提供类型保障,同时让组件、Props、事件、状态管理全部可推导、可校验、不靠运行时猜测。
创建 Vue3 + TypeScript 项目
使用 Vite 官方模板一键生成,避免手动配置 tsconfig 和插件兼容性问题:
执行命令:npm create vite@latest my-app -- --template vue-ts
进入目录:cd my-app
安装依赖:npm install
启动开发服务器:npm run dev
这一步操作起来很简单,直接把命令复制粘贴执行就行。Vite 模板已预置 【tsconfig.json 启用 strict: true】,这是类型安全的底线,不可跳过或关闭。
编写带类型约束的单文件组件
在 src/components/HelloWorld.vue 中,使用 <script setup lang="ts"></script> 语法糖:
定义 Props 接口并传入 defineProps:
interface Props {<br> title: string;<br> count?: number;<br> isActive: boolean;<br>}<br>const props = defineProps<props>();</props>
声明事件并限定参数类型:
const emit = defineEmits (e: 'update:title', newTitle: string): void;<br> (e: 'delete', id: number): void;<br>}>();
响应式变量必须显式标注类型(尤其基础类型):
import { ref, reactive } from 'vue';<br>const message = ref<string>('Hello');<br>const user = reactive({ name: 'Alice', age: 30 });</string>
配置路径别名与类型声明
第一步:修改 tsconfig.json 的 compilerOptions 节点,加入:
使用 Scrapfly SDK(scrapfly-sdk)在 TypeScript 或 JavaScript 中进行网页抓取,用于用户请求抓取 URL、绕过反爬虫防护、渲染页面等场景。
"baseUrl": ".",<br>"paths": {<br> "@/*": ["src/*"]<br>}
第二步:在 vite.config.ts 中添加路径解析支持:
import { defineConfig } from 'vite'<br>import vue from '@vitejs/plugin-vue'<br>export default defineConfig({<br> plugins: [vue()],<br> resolve: {<br> alias: { '@': path.resolve(__dirname, 'src') }<br> }<br>})
第三步:确保 src/env.d.ts 存在且内容为:<reference types="vite/client"></reference>
否则 import.meta.env 将无类型提示。
为路由和 Store 添加类型
方法一:Vue Router 类型扩展
在 src/router/index.ts 顶部添加:
import type { RouteRecordRaw } from 'vue-router'<br>declare module 'vue-router' {<br> interface RouteMeta {<br> requiresAuth?: boolean<br> title?: string<br> }<br>}
方法二:Pinia Store 类型化
在 src/stores/counter.ts 中:
import { defineStore } from 'pinia'<br>export const useCounterStore = defineStore('counter', {<br> state: () => ({ count: 0 as number }),<br> actions: {<br> increment() { this.count++ }<br> }<br>})
调用时自动获得类型推导:
const store = useCounterStore()<br>store.increment() // ✅ 类型安全调用
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










