Vueyi TypeScript ile Kullanma
Vue'yi TypeScript ile Kullanma
TypeScript gibi bir tip sistemi, derleme zamanında statik analiz ile birçok yaygın hatayı tespit edebilir. Bu, üretimde çalışma zamanı hatalarını azaltır ve büyük ölçekli uygulamalarda kodu daha güvenle yeniden düzenlememize olanak tanır. TypeScript ayrıca IDE'lerde tip tabanlı otomatik tamamlama aracılığıyla geliştirici ergonomisini artırır.
Vue, kendisi TypeScript ile yazılmıştır ve birinci sınıf TypeScript desteği sunar. Tüm resmi Vue paketleri, kutudan çıkar çıkmaz çalışması gereken toplu tip bildirimleri ile birlikte gelir.
Proje Ayarları
create-vue
, resmi proje iskeletleme aracı, Vite-tabanlı, TypeScript uyumlu bir Vue projesi oluşturma seçenekleri sunar.
Genel Bakış
Vite tabanlı bir ayar ile, geliştirici sunucusu ve paketleyici sadece dönüştürme işlemi yapmaktadır ve herhangi bir tip kontrolü gerçekleştirmemektedir. Bu, Vite geliştirici sunucusunun TypeScript kullanırken bile hızını korumasını sağlar.
Geliştirme sırasında tip hataları hakkında anında geri bildirim almak için iyi bir
IDE ayarı
kullanmanızı öneririz.SFC'ler kullanıyorsanız, komut satırı tip kontrolü ve tip bildirimleri oluşturma için
vue-tsc
yardımcı aracını kullanın.vue-tsc
, TypeScript'in kendi komut satırı arayüzü olantsc
etrafında bir sargıdır. Çoğunluklatsc
ile aynı şekilde çalışır, ancak TypeScript dosyalarının yanı sıra Vue SFC'lerini de destekler.vue-tsc
'yi Vite geliştirici sunucusuna paralel olarak izleme modunda çalıştırabilir veya kontrolleri ayrı bir iş parçacığında yürüten vite-plugin-checker gibi bir Vite eklentisi kullanabilirsiniz.Vue CLI de TypeScript desteği sağlamaktadır, ancak artık önerilmemektedir.
Aşağıdaki notlara
bakın.
IDE Desteği
Visual Studio Code (VS Code), TypeScript için harika kutudan çıkar çıkmaz desteği nedeniyle güçlü bir şekilde önerilir.
Vue - Official (önceden Volar), Vue SFC'leri içerisinde TypeScript desteği sağlayan resmi VS Code uzantısıdır, bununla birlikte birçok başka harika özellik sunar.
:::tip Vue - Official uzantısı, Vue 2 için önceki resmi VS Code uzantımız olan Vetur'u değiştirmektedir. Eğer şuan Vetur kuruluysa, onu Vue 3 projelerinde devre dışı bırakmayı unutmayın. :::
WebStorm da hem TypeScript hem de Vue için kutudan çıkar çıkmaz destek sunar. Diğer JetBrains IDE'leri de ya kutudan çıkar çıkmaz ya da ücretsiz bir eklenti aracılığıyla destekler. 2023.2 sürümünden itibaren WebStorm ve Vue Eklentisi, Vue Language Server için yerleşik destekle gelir. Vue servisinin, Ayarlar > Diller ve Çerçeveler > TypeScript > Vue altında tüm TypeScript sürümlerinde Volar entegrasyonunu kullanacak şekilde ayarlanabilir. Varsayılan olarak, 5.0 ve üzeri TypeScript sürümleri için Volar kullanılacaktır.
tsconfig.json
'ı Yapılandırma
create-vue
aracılığıyla oluşturulan projeler, önceden yapılandırılmış tsconfig.json
içermektedir. Temel yapılandırma, @vue/tsconfig
paketinde soyutlanmıştır. Projede, farklı ortamlarda (örneğin, uygulama kodu ve test kodu, farklı global değişkenlere sahip olmalıdır) doğru tiplerin sağlanmasını sağlamak için Proje Referansları kullanıyoruz.
tsconfig.json
'ı manuel olarak yapılandırırken, bazı dikkate değer seçenekler şunlardır:
compilerOptions.isolatedModules
değeritrue
olarak ayarlanmıştır çünkü Vite, TypeScript'i dönüştürmek için esbuild kullanır ve tek dosya dönüştürme sınırlamalarına tabi olabilir.compilerOptions.verbatimModuleSyntax
,isolatedModules
'in bir üst kümesidir ve iyi bir seçimdir - bunu@vue/tsconfig
kullanmaktadır.Eğer Seçenekler API'si kullanıyorsanız,
this
'in bileşen seçeneklerindeki tip kontrolünü sağlamak içincompilerOptions.strict
değerinitrue
olarak ayarlamanız (veya en azındancompilerOptions.noImplicitThis
özelliğini aktif etmeniz, bustrict
bayrağının bir parçasıdır) gerekir. Aksi takdirdethis
,any
olarak değerlendirilecektir.Eğer yapılandırma aracınızda
@/*
gibi resolver takma adları ayarladıysanız, bunu TypeScript için decompilerOptions.paths
aracılığıyla ayarlamanız gerekir.Vue ile TSX kullanmayı planlıyorsanız,
compilerOptions.jsx
değerini"preserve"
olarak ayarlayın vecompilerOptions.jsxImportSource
değerini"vue"
olarak ayarlayın.
Ayrıca bakın:
Vue CLI ve ts-loader
Hakkında Not
Vue CLI gibi webpack tabanlı ayarlarda, modül dönüştürme hattı bağlamında, örneğin ts-loader
ile tip kontrolü yapması yaygındır. Ancak bu temiz bir çözüm değildir çünkü tip sistemi, tip kontrollerini gerçekleştirmek için tüm modül grafiği hakkında bilgiye ihtiyaç duyar.
Bu, aşağıdaki sorunlara yol açar:
ts-loader
yalnızca dönüştürme sonrası kodu tip kontrol edebilir. Bu, IDE'lerde veyavue-tsc
'den görülen hatalarla örtüşmez; zira bu hatalar doğrudan kaynak koda geri döner.Tip kontrolü yavaş olabilir. Kod dönüşümleri ile aynı iş parçacığında / süreçte gerçekleştirildiğinde, bu, tüm uygulamanın derleme hızını önemli ölçüde etkiler.
Zaten IDE'mizde ayrı bir süreçte çalışan bir tip kontrolümüz var, bu nedenle geliştirici deneyimini yavaşlatmanın maliyeti, iyi bir denge değildir.
Eğer şu anda Vue 3 + TypeScript'i Vue CLI aracılığıyla kullanıyorsanız, Vite'ye geçiş yapmanızı kuvvetle öneriyoruz. Ayrıca sadece dönüştürme işlemi yapan TS desteği etkinleştirmek için CLI seçenekleri üzerinde çalışıyoruz, böylelikle tip kontrolü için vue-tsc
'ye geçiş yapabilirsiniz.
Genel Kullanım Notları
defineComponent()
TypeScript'in bileşen seçenekleri içindeki tipleri doğru bir şekilde çıkarmasını sağlamak için, bileşenleri defineComponent()
ile tanımlamamız gerekiyor:
import { defineComponent } from 'vue'
export default defineComponent({
// tip çıkarımı etkin
props: {
name: String,
msg: { type: String, required: true }
},
data() {
return {
count: 1
}
},
mounted() {
this.name // tip: string | undefined
this.msg // tip: string
this.count // tip: number
}
})
defineComponent()
ayrıca `olmadan Composition API kullanırken
setup()`'a geçirilen props'ların çıkarımını destekler:
import { defineComponent } from 'vue'
export default defineComponent({
// tip çıkarımı etkin
props: {
message: String
},
setup(props) {
props.message // tip: string | undefined
}
})
Ayrıca bakın:
webpack Treeshaking Notu
defineComponent
için tip testleri
defineComponent()
ayrıca düz JavaScript ile tanımlanan bileşenler için tip çıkarımını da etkinleştirir.
Tek Dosya Bileşenlerinde Kullanım
SFC'lerde TypeScript kullanmak için, `etiketlerine
lang="ts"özelliğini ekleyin.
lang="ts"` mevcut olduğunda, tüm şablon ifadeleri daha sıkı tip kontrolünden faydalanır.
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
data() {
return {
count: 1
}
}
})
</script>
<template>
<!-- tip kontrolü ve otomatik tamamlama etkin -->
{{ count.toFixed(2) }}
</template>
lang="ts"
ayrıca `` ile de kullanılabilir:
<script setup lang="ts">
// TypeScript etkin
import { ref } from 'vue'
const count = ref(1)
</script>
<template>
<!-- tip kontrolü ve otomatik tamamlama etkin -->
{{ count.toFixed(2) }}
</template>
Şablonlarda TypeScript
ayrıca
veya `` kullanıldığında bağlama ifadelerinde TypeScript'i destekler. Bu, şablon ifadelerinde tip dönüşümü yapmanız gerektiğinde kullanışlıdır.
İşte bir örnek:
<script setup lang="ts">
let x: string | number = 1
</script>
<template>
<!-- hata çünkü x bir string olabilir -->
{{ x.toFixed(2) }}
</template>
Bu, çevrimiçi bir tip dönüşümü ile aşılabilir:
<script setup lang="ts">
let x: string | number = 1
</script>
<template>
{{ (x as number).toFixed(2) }}
</template>
Eğer Vue CLI veya webpack tabanlı bir yapı kullanıyorsanız, şablon ifadelerinde TypeScript kullanmak için vue-loader@^16.8.0
gerekmektedir.
TSX ile Kullanım
Vue, bileşenleri JSX / TSX ile yazmayı da destekler. Detaylar Render Fonksiyonu ve JSX
kılavuzunda ele alınmaktadır.
Genel Bileşenler
Genel bileşenlerin desteklendiği iki durum vardır:
- SFC'lerde: `
ile
genericözelliği
- Render fonksiyonu / JSX bileşenleri:
defineComponent()
'ın fonksiyon imzacı`
API'ye Özel Tarifler
Composition API ile TS
Options API ile TS