vue中配置 ts

在 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…