Tür Düzeyi DSL'lerde Hata Mesajları
DSL kullanıcılarına yararlı derleme hataları sunun.
Tür Düzeyi DSL'lerde Hata Mesajları, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.
Tür Düzeyi DSL'lerde Yararlı Hatalar
Tür düzeyindeki bir DSL'nin en zor kısmı, başarısızlıkları okunabilir hâle getirmektir. Ham never veya “atanamaz” hataları kullanıcıların kafasını karıştırır. Markalı hata türleri ve özel olarak oluşturulmuş never mesajları kullanarak açıklayıcı hatalar sunarız.
never Sorunu
Doğrulama never türüne indirgenerek başarısız olduğunda derleyici, “X türündeki bağımsız değişken never türüne atanamaz” der; bu, kullanıcıya nedenini söylemez. Daha iyisini yapabiliriz.
Markalı Hata Türleri
Yalın never yerine, türünde insanların okuyabileceği bir mesaj dizesi taşıyan, benzersiz biçimli bir hata türü döndürün.
type TypeError<Msg extends string> = {
readonly __error: Msg;
};
type E = TypeError<"Column 'foo' does not exist">;Doğrulamadan Hata Döndürme
Bir doğrulayıcı, geçerli değer türünü veya sorunu açıklayan markalı bir hatayı döndürür. “Nokta içeriyor” denetimi, şablon değişmezi desenidir (gerçek kodda ters tırnaklar kullanılır); burada onu HasDot olarak gösteriyoruz.
// HasDot<S> is the backtick pattern: any text, ".", any text.
type Validate<S extends string> =
S extends HasDot
? S
: TypeError<"Path must contain a dot, e.g. user.name">;Hatayı Ortaya Çıkmaya Zorlama
Parametreyi, hata markasına atanamayan herhangi bir değer geçirildiğinde mesajı yazdıracak şekilde kısıtlayın. Hata türü doğrudan derleyici çıktısında görünür.
declare function path<S extends string>(
p: Validate<S> extends TypeError<infer M> ? TypeError<M> : S
): void;
path("oops");
// Error message includes: __error: "Path must contain a dot..."Birden Çok Hatayı Ayırt Etme
Farklı başarısızlıklar farklı mesajlar döndürür; böylece kullanıcılar tek bir genel ret yerine özel yönlendirme alır. HasDot, “nokta içeriyor” için kullanılan ters tırnaklı şablon değişmezi desenidir.
type Check<S extends string> =
S extends "" ? TypeError<"Path cannot be empty">
: S extends HasDot ? S
: TypeError<"Missing dot separator">;never'a Farklı Bir Yaklaşım
Başka bir teknik, bir değer konumunu değişmez bir mesajla eşleştirerek üzerine gelindiğinde mesajın görünmesini sağlar. Soruna neden olan türü etiketli bir nesneyle kesiştirirsiniz.
type Invalid<M extends string> = { error: M } & never;
// using never keeps it unassignable while the label hints the causeAkıcı DSL'lerde Hatalar
Zincirlenmiş bir DSL'de geçersiz sonraki adımı geçerli bir aşama yerine hata markalı bir tür döndürecek şekilde tasarlayın; böylece düzenleyici mesajı hatanın yapıldığı yerde gösterir.
interface Stage {
// calling done() before where() yields a labeled error
done(): TypeError<"Call .where() before .done()">;
}Mesajları Kısa Tutma
Uzun mesaj türleri derleyici çıktısını şişirir ve geliştirme araçlarını yavaşlatır. Kısa ve eyleme dönük ifadeleri tercih edin. Eklenmesi kolaysa soruna neden olan belirteci dahil edin; ancak çok büyük yerleştirmelerden kaçının.
Hatalarınızı Sınama
Bilinen hatalı girdiler için hata markasının ortaya çıktığını doğrulayan tür düzeyi testleri yazın; böylece yeniden düzenlemeler geliştirici deneyimini fark edilmeden kötüleştirmez.
type Expect<T extends true> = T;
type _t = Expect<Validate<"oops"> extends TypeError<any> ? true : false>;Bu Neden Önemli
Bir DSL, ancak hataları kadar iyidir. Markalı hata türleri, anlaşılması zor never başarısızlıklarını kendini açıklayan mesajlara dönüştürerek tür düzeyi API'nizi kullanma deneyimini büyük ölçüde iyileştirir.
Hızlı Kontrol
Tür düzeyi hata mesajlarını ne kadar anladığınızı doğrulayın.
Özet
Tür düzeyi DSL'leri kullanılabilir hâle getirmek için yalın never yerine okunabilir mesajlar içeren markalı hata türleri kullanın. Doğrulayıcılar ya geçerli türü ya da belirli bir hata markasını döndürür; parametreleri kısıtlamak mesajı derleyici çıktısında görünür kılar. Mesajları kısa tutun ve sınayın.
Sıkça Sorulan Sorular
“Tür Düzeyi DSL'lerde Hata Mesajları” dersi ücretsiz mi?
Evet — “Tür Düzeyi DSL'lerde Hata Mesajları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.
“Tür Düzeyi DSL'lerde Hata Mesajları” dersinde ne öğreneceğim?
DSL kullanıcılarına yararlı derleme hataları sunun. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Tür Düzeyi DSL'lerde Hata Mesajları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Tür Düzeyi DSL Nedir?
- Akıcı Sorgu DSL'si Tasarlama
- Derleme Zamanında Girdi Doğrulama
- Tür Düzeyi DSL'lerde Hata Mesajları