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-tscyardımcı aracını kullanın.vue-tsc, TypeScript'in kendi komut satırı arayüzü olantscetrafında bir sargıdır. Çoğunluklatscile 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 notlarabakı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.isolatedModulesdeğeritrueolarak 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/tsconfigkullanmaktadır.Eğer Seçenekler API'si kullanıyorsanız,
this'in bileşen seçeneklerindeki tip kontrolünü sağlamak içincompilerOptions.strictdeğerinitrueolarak ayarlamanız (veya en azındancompilerOptions.noImplicitThisözelliğini aktif etmeniz, bustrictbayrağının bir parçasıdır) gerekir. Aksi takdirdethis,anyolarak değerlendirilecektir.Eğer yapılandırma aracınızda
@/*gibi resolver takma adları ayarladıysanız, bunu TypeScript için decompilerOptions.pathsaracılığıyla ayarlamanız gerekir.Vue ile TSX kullanmayı planlıyorsanız,
compilerOptions.jsxdeğerini"preserve"olarak ayarlayın vecompilerOptions.jsxImportSourcedeğ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-loaderyalnı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ırkensetup()`'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 NotudefineComponentiç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, `etiketlerinelang="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: `
ilegenericözelliği - Render fonksiyonu / JSX bileşenleri:
defineComponent()'ın fonksiyon imzacı`
API'ye Özel Tarifler
Composition API ile TSOptions API ile TS