在 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-typesconst 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: stringcount?: 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: stringage: number}>,required: true}
    })
    

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

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

如何在vue项目中使用TypeScript?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96126.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96126.shtml
英文地址,请注明出处:http://en.pswp.cn/web/96126.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云镜像地址获取,并安装 docker的mysql和nginx等服务,java,python,ffmpeg,go等环境

阿里云那个镜像地址获取 阿里云镜像加速器不是一个通用的 registry.cn-hangzhou.aliyuncs.com&#xff0c;而是你账号专属的&#xff0c;比如这样&#xff1a; https://abcd1234.mirror.aliyuncs.com&#x1f449; 登录阿里云控制台获取&#xff1a; 阿里云镜像加速器 然后替…

conda环境导出

1. 激活你想要打包的环境首先&#xff0c;确保你激活了你要打包的 conda 环境&#xff1a;conda activate qwen2. 导出环境配置使用 conda 命令将当前环境的配置导出为一个 .yml 文件&#xff0c;记录下环境中所有的依赖和版本&#xff1a;conda list --export > techgpt_en…

openEuler2403安装部署Kafka

文章目录 openEuler2403安装部署Kafka with KRaft一、前言1.简介2.架构3.环境 二、正文1.部署服务器2.基础环境1&#xff09;JDK 安装部署2&#xff09;关闭防火墙 3.单机部署1&#xff09;下载软件包2&#xff09;修改配置文件3&#xff09;格式化存储目录4&#xff09;单机启…

发布工业智能体,云从科技打造制造业AI“运营大脑”

近日&#xff0c;在2025世界智能产业博览会重庆市工业智能体首发仪式现场&#xff0c;云从科技重磅发布经营决策-产线运营智能体&#xff0c;为制造业的智能化转型提供了全新的解决方案。该智能体的亮相&#xff0c;不仅代表着人工智能技术在工业领域的深度应用&#xff0c;更标…

【Linux基础】parted命令详解:从入门到精通的磁盘分区管理完全指南

目录 前言 1 parted命令概述 1.1 什么是parted 1.2 parted与fdisk的对比 1.3 parted的主要优势 2 parted命令的安装与基本语法 2.1 在不同Linux发行版中安装parted 2.2 parted的基本语法 2.3 parted的工作模式 3 parted交互式命令详解 3.1 交互式操作流程 3.2 主要…

如何在路由器上配置DHCP服务器?

在路由器上配置DHCP服务器的步骤因品牌&#xff08;如TP-Link、华为、小米、华硕等&#xff09;略有差异&#xff0c;但核心流程一致&#xff0c;主要包括登录管理界面、开启DHCP功能、设置IP地址池及相关参数。以下是通用操作指南&#xff1a; 一、准备工作 确保电脑/手机已连…

HTML和CSS学习

HTML学习 注释 <!-- -->组成 告诉浏览器我是html文件<!DOCTYPE html> <title>浏览器标签</title> <body> <!--- 其中是主要内容 ---> <p> 段落 </p> </body> </html> (结束点…

OpenTenBase vs MySQL vs Oracle,企业级应用数据库实盘对比分析

摘要 因为工作久了的缘故&#xff0c;接触过不少数据库。公司的管理系统用的MySQL&#xff0c;财务系统用的Oracle。随着时代发展&#xff0c;国产开源数据库已经在性能上能与这些国际知名顶尖数据库品牌相媲美&#xff0c;其中OpenTenBase以其开放环境和优越性能脱颖而出&…

Oracle 备份与恢复常见的七大问题

为了最大限度保障数据的安全性&#xff0c;同时能在不可预计灾难的情况下保证数据的快速恢复&#xff0c;需要根据数据的类型和重要程度制定相应的备份和恢复方案。在这个过程中&#xff0c;DBA的职责就是要保证数据库&#xff08;其它数据由其它岗位负责&#xff09;的高可用和…

StringBuilder类的数据结构和扩容方式解读

目录 StringBuilder是什么 核心特性&#xff1a; StringBuilder数据结构 1. 核心存储结构&#xff08;基于父类 AbstractStringBuilder&#xff09; 2. 类定义与继承关系 3. 数据结构的核心特点 StringBuilder数据结构的初始化方式 1. 无参构造&#xff1a;默认初始容量…

LangChain实战(十七):构建与PDF/PPT文档对话的AI助手

本文是《LangChain实战课》系列的第十七篇,将专篇深入讲解如何构建能够与PDF和PPT文档进行智能对话的AI助手。通过学习本文,您将掌握复杂格式文档的解析技巧、文本与表格处理技术,以及实现精准问答的系统方法。 前言 在日常工作和学习中,PDF和PPT文档是我们最常接触的文档…

鱼眼相机模型

鱼眼相机模型 最近涉及鱼眼相机模型、标定使用等&#xff0c;作为记录&#xff0c;更新很久不曾更新的博客。 文章目录鱼眼相机模型1 相机成像2 鱼眼模型3 畸变3.1 适用针孔和MEI3.2 Kannala-Brandt鱼眼模型4 代码实现1 相机成像 针孔相机&#xff1a;所有光线从一个孔&#xf…

大语言模型提示词工程详尽实战指南

引言&#xff1a;与大型语言模型&#xff08;LLM&#xff09;高效对话的艺术大型语言模型&#xff08;LLM&#xff09;——例如我们熟知的GPT系列、Claude、Llama等——在自然语言处理&#xff08;NLP&#xff09;领域展现了惊人的能力&#xff0c;能够执行文本摘要、翻译、代码…

HTTP 请求体格式详解

1. 概览与概念 Content-Type&#xff1a;HTTP 请求/响应头&#xff0c;表示消息体的媒体类型&#xff08;MIME type&#xff09;。服务端用它决定如何解析请求体。常见场景&#xff1a; 纯结构化数据&#xff08;JSON&#xff09; → application/json表单 文件上传 → multip…

事务设置和消息分发

事务 RabbitMQ是基于AMQP协议实现的&#xff0c;该协议实现了事务机制&#xff0c;因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作&#xff0c;RabbitMQ事务允许开发者确保消息的发送和接收是原子性的&#xff0c;要么 全部成功&#xff0c;要么全部失败.| 前…

Python 中 try / except / else / finally 异常处理详解

1. 基本结构 try:# 可能会抛出异常的代码 except SomeException as e:# 捕获并处理异常 else:# 如果 try 中代码没有异常&#xff0c;就执行这里 finally:# 无论是否发生异常&#xff0c;最后都会执行这里2. 各部分的作用 try 用途&#xff1a;包含可能发生异常的代码段。如果代…

冰火岛 Tech 传:Apple Foundation Models 心法解密(下集)

引子 上集说到冰火岛冰屋内,谢逊、张翠山、殷素素三人亲见 “指令(Instructions)” 如何让 AI 脱胎换骨,从木讷报地名的 “愣头青”,变身为文采斐然的 “旅行作家”。 正当素素惊叹这 AI 武学的奇妙时,谢逊却突然神色一凛,指着手腕上用冰屑刻的 “4096” 字样道:“这等…

Qt信号与槽机制全面解析

✨ 1. 核心概念信号与槽是Qt独创的一种对象间通信机制&#xff0c;它使得一个对象的状态变化或事件发生能够自动通知其他对象作出响应&#xff0c;从而实现高度解耦的代码设计。1.1 信号&#xff08;Signals&#xff09;定义&#xff1a;信号是由对象在特定事件发生时发出&…

2025年COR SCI2区,基于近似细胞分解的能源高效无人机路径规划问题用于地质灾害监测,深度解析+性能实测

目录1.摘要2.问题描述与数学模型3.能源网格混合元启发式算法4.结果展示5.参考文献6.代码获取7.算法辅导应用定制读者交流1.摘要 本文提出了一种能源高效的无人机路径规划方法&#xff08;EURP&#xff09;用于监测分散的地质灾害易发区域&#xff0c;通过建立无人机飞行模式的…

LangChain关于提示词的几种写法

上文中 <---->(可点击移步查阅),我们已经了解到LangChain如何编写调用大模型的一个基本框架, 在编写完这个基本框架后,就要与大模型进行交互了,这时候,就需要我们编写提示词了, 那么以下,就会介绍提示词的几种编写方式 1 可携带变量的提示词 1.1 PromptTempla…