Using Vue with TypeScript,很久以前就聽過TypeScript了
接下來三篇內容會介紹TypeScript如何開發Vue的狀況吧?
快來看看吧~
像 TypeScript 這樣的類型系統可以通過靜態分析在構建時檢測許多常見錯誤。這減少了在生產環境中出現運行時錯誤的機會,也使我們在大型應用程序中更有信心地進行代碼重構。TypeScript 還通過在集成開發環境 (IDE) 中基於類型的自動完成來改善開發者的使用體驗。
Vue 本身就是用 TypeScript 編寫的,並提供了原生的 TypeScript 支持。所有官方的 Vue 套件都包含了開箱即用的類型聲明。
create-vue,官方的專案腳手架工具,提供了搭建基於 Vite 的 TypeScript 準備好的 Vue 專案的選項。
使用基於 Vite 的設置,開發伺服器和打包器僅進行轉譯,並不進行類型檢查。這確保了即使在使用 TypeScript 的情況下,Vite 開發伺服器仍能保持極快的速度。
強烈建議使用 Visual Studio Code (VS Code),因為它對 TypeScript 提供了極好的開箱即用支持。
提示: Vue - Official 擴展取代了 Vetur,我們之前的官方 VS Code 擴展,適用於 Vue 2。如果您當前在 Vue 3 專案中安裝了 Vetur,請確保在 Vue 3 專案中禁用它。
tsconfig.json
通過 create-vue 建立的專案包括預配置的 tsconfig.json。基礎配置在 @vue/tsconfig 包中進行抽象。在專案中,我們使用專案引用來確保在不同環境中運行的代碼具有正確的類型(例如,應用代碼和測試代碼應有不同的全局變量)。
手動配置 tsconfig.json 時,一些值得注意的選項包括:
另請參見:
ts-loader
在基於 webpack 的設置(例如 Vue CLI)中,通常在模組轉換管道中執行類型檢查,例如使用 ts-loader。然而,這並不是一個乾淨的解決方案,因為類型系統需要了解整個模組圖以進行類型檢查。單個模組的轉換步驟根本不適合這項任務。這會導致以下問題:
如果您目前正在通過 Vue CLI 使用 Vue 3 + TypeScript,我們強烈建議遷移到 Vite。我們也在努力提供 CLI 選項以啟用僅轉譯的 TS 支持,這樣您就可以切換到 vue-tsc 進行類型檢查。
為了讓 TypeScript 正確推斷組件選項中的類型,我們需要使用 defineComponent() 定義組件:
import { defineComponent } from 'vue'
export default defineComponent({
// 啟用類型推斷
props: {
name: String,
msg: { type: String, required: true }
},
data() {
return {
count: 1
}
},
mounted() {
this.name // 類型:string | undefined
this.msg // 類型:string
this.count // 類型:number
}
})
defineComponent() 也支援在使用組合式 API 而不使用 <script setup> 時推斷傳遞給 setup() 的 props:
import { defineComponent } from 'vue'
export default defineComponent({
// 啟用類型推斷
props: {
message: String
},
setup(props) {
props.message // 類型:string | undefined
}
})
另請參見:
提示: defineComponent() 也啟用在純 JavaScript 中定義的組件的類型推斷。
要在 SFC 中使用 TypeScript,請在 <script> 標籤中添加 lang="ts" 屬性。當 lang="ts" 存在時,所有模板表達式也將享受更嚴格的類型檢查。
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
data() {
return {
count: 1
}
}
})
</script>
<template>
<!-- 啟用類型檢查和自動完成功能 -->
{{ count.toFixed(2) }}
</template>
lang="ts" 也可以與 <script setup> 一起使用:
<script setup lang="ts">
// 啟用 TypeScript
import { ref } from 'vue'
const count = ref(1)
</script>
<template>
<!-- 啟用類型檢查和自動完成功能 -->
{{ count.toFixed(2) }}
</template>
當使用 <script lang="ts"> 或 <script setup lang="ts"> 時,<template> 也支持綁定表達式中的 TypeScript。這在需要在模板表達式中進行類型轉換的情況下非常有用。
這是一個牽強的例子:
<script setup lang="ts">
let x: string | number = 1
</script>
<template>
<!-- 錯誤,因為 x 可能是字符串 -->
{{ x.toFixed(2) }}
</template>
這可以通過內聯類型轉換來解決:
<script setup lang="ts">
let x: string | number = 1
</script>
<template>
{{ (x as number).toFixed(2) }}
</template>
提示: 如果使用 Vue CLI 或基於 webpack 的設置,模板表達式中的 TypeScript 需要 vue-loader@^16.8.0。
Vue 也支持使用 JSX / TSX 編寫組件。詳細內容可參見渲染函數與 JSX 指南。
泛型組件在兩種情況下得到支持:
怎麼看完有種空虛的感覺www
還是太菜沒有抓到什麼重點
所以以下問題來了!
使用 TypeScript 開發 Vue 的好處包括:
這些優勢使得使用 TypeScript 開發 Vue 應用變得更加高效與可靠。