vue中配置 ts

发布于:2025-09-12 ⋅ 阅读:(25) ⋅ 点赞:(0)

在 Vue 项目中配置 TypeScript(TS)可以提升代码的类型安全性和开发体验。以下是在 Vue 项目(基于 Vite)中配置 TypeScript 的详细步骤和关键配置:

一、创建支持 TypeScript 的 Vue 项目

如果是新建项目,推荐直接使用官方模板创建:

bash

# npm
npm create vite@latest my-vue-ts-app -- --template vue-ts

# yarn
yarn create vite my-vue-ts-app --template vue-ts

# pnpm
pnpm create vite my-vue-ts-app -- --template vue-ts

进入项目并安装依赖:

bash

cd my-vue-ts-app
npm install

二、现有 Vue 项目添加 TypeScript

如果需要在现有 Vue 项目中添加 TypeScript,按以下步骤操作:

1. 安装必要依赖

bash

# 安装 TypeScript 和 Vue 类型定义
npm install typescript @vuedx/typescript-plugin-vue vue-tsc -D

# 安装 Vue 3 的类型声明
npm install @vue/runtime-core @vue/compiler-sfc -D
2. 创建 TypeScript 配置文件

在项目根目录创建 tsconfig.json

{
  "compilerOptions": {
    // 目标 ES 版本
    "target": "ESNext",
    // 模块系统
    "module": "ESNext",
    // 模块解析策略
    "moduleResolution": "Node",
    // 允许导入 JSON 文件
    "resolveJsonModule": true,
    // 启用严格模式
    "strict": true,
    // 跳过库文件类型检查
    "skipLibCheck": true,
    // 允许从没有默认导出的模块中默认导入
    "allowSyntheticDefaultImports": true,
    // 保留 JSX 语法
    "jsx": "preserve",
    // 基础 URL
    "baseUrl": ".",
    // 路径别名(需与 Vite 配置同步)
    "paths": {
      "@/*": ["src/*"]
    },
    // 类型声明文件
    "types": ["vite/client", "vue"],
    // 允许编译 JS 文件
    "allowJs": true
  },
  // 需要编译的文件
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
  "exclude": ["node_modules"]
}
3. 配置 Vite 支持 TypeScript

修改 vite.config.ts(注意文件后缀改为 .ts):

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src')
    }
  }
})
4. 创建类型声明文件

在 src 目录下创建 env.d.ts,用于声明模块类型:

/// <reference types="vite/client" />

// 声明 Vue 模块
declare module '*.vue' {
  import type { DefineComponent } from 'vue'
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
  const component: DefineComponent<{}, {}, any>
  export default component
}

// 声明环境变量类型
interface ImportMetaEnv {
  readonly VITE_APP_TITLE: string
  // 更多环境变量...
}

interface ImportMeta {
  readonly env: ImportMetaEnv
}

三、Vue 组件中使用 TypeScript

在 Vue 组件中使用 TypeScript 主要有两种方式:

1. 使用 <script lang="ts">

vue

<script lang="ts">
import { defineComponent, ref } from 'vue'

export default defineComponent({
  name: 'HelloWorld',
  props: {
    msg: {
      type: String,
      required: true
    }
  },
  setup(props) {
    const count = ref(0)
    
    const increment = () => {
      count.value++
    }
    
    return {
      count,
      increment
    }
  }
})
</script>
2. 使用 <script setup lang="ts">(推荐)

vue

<script setup lang="ts">
import { ref, defineProps, defineEmits } from 'vue'

// 定义 props 类型
const props = defineProps<{
  msg: string
  count?: number
}>()

// 定义 emits 类型
const emit = defineEmits<{
  (e: 'change', value: number): void
}>()

const num = ref(0)

const handleClick = () => {
  num.value++
  emit('change', num.value)
}
</script>

四、关键配置说明

  1. tsconfig.json 核心选项

    • strict: true:启用严格类型检查(推荐)
    • paths:配置路径别名,需与 Vite 中的 resolve.alias 保持一致
    • include:指定需要编译的文件范围
  2. 类型声明

    • env.d.ts 用于声明 .vue 文件和环境变量的类型
    • 第三方库如果没有类型定义,需要安装对应的 @types/xxx 包
  3. 组件 Props 类型定义

    • 使用 defineProps<{...}> 进行类型定义(<script setup> 中)
    • 传统方式使用 props 选项配合 type 或 PropType

五、常见问题解决

  1. 找不到模块 “*.vue” 或其相应的类型声明

    • 确保 env.d.ts 中包含了 .vue 模块的声明
    • 检查 tsconfig.json 中的 include 配置是否包含 src/**/*.vue
  2. 路径别名无法识别

    • 确保 tsconfig.json 的 paths 和 Vite 配置的 alias 一致
    • 安装 @types/node 以获得路径相关的类型支持:npm install @types/node -D
  3. PropType 类型提示
    当需要复杂类型时,使用 PropType

    typescript

    import type { PropType } from 'vue'
    
    const props = defineProps({
      user: {
        type: Object as PropType<{
          name: string
          age: number
        }>,
        required: true
      }
    })
    

通过以上配置,你的 Vue 项目就可以充分利用 TypeScript 的类型检查功能,提升代码质量和开发效率。更多细节可参考 Vue 官方 TypeScript 指南

配置vue+ts项目时,vue.config.js文件中需要添加哪些内容?

如何在vue项目中使用TypeScript?

在vue项目中配置TypeScript时可能会遇到哪些问题?


网站公告

今日签到

点亮在社区的每一天
去签到