0Pricing
TypeScript Academy · Ders

Derleme Zamanında Girdi Doğrulama

Biçimi bozuk DSL ifadelerini çalışma zamanından önce reddedin.

Derleme Zamanında Girdi Doğrulama, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 3. 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.

Derleme Zamanında Girdi Doğrulama

Tür düzeyindeki DSL'ler hatalı biçimlendirilmiş ifadeleri çalışma zamanından önce reddedebilir. Şablon değişmezi ve koşullu türleri kullanarak bir dizenin yapısını tür düzeyinde doğrular ve geçersiz girdiyi reddederiz.

Örnek: Küçük Bir Seçici Dili

"user.name" veya "order.items.length" gibi dizeleri kabul ettiğinizi düşünün. Derleme zamanında "user." veya ".name" değerlerini reddetmek istiyoruz.

Şablon Değişmezleriyle Ayrıştırma

Şablon değişmezi türleri, derleme zamanında ayrıştırmanın temelini oluşturan infer kullanarak bir dizeyi parçalara ayırır. Gerçek kalıp ters tırnakla sınırlandırılır (baş-nokta-kuyruk ve infer ile); bu bölme eşleştiricisini DotSplit olarak adlandırıyoruz.

// Real TS: backtick pattern matching Head, ".", Tail.

type Split<S extends string> =
  S extends DotSplit<infer Head, infer Tail>
    ? [Head, ...Split<Tail>]
    : [S];

type P = Split<"a.b.c">; // ["a", "b", "c"]

Her Bölümü Doğrulama

Koşullu bir tür, hiçbir bölümün boş olmadığını denetler. Boş bir bölüm, girdiyi geçersiz kılar. Aynı DotSplit örüntüsü (gerçek kodda ters tırnaklı bir şablon değişmezi), yinelemeyi yönlendirir.

type NonEmpty<S extends string> = S extends "" ? false : true;

type Valid<S extends string> =
  S extends DotSplit<infer H, infer T>
    ? H extends "" ? false : Valid<T>
    : NonEmpty<S>;

type V1 = Valid<"a.b">;  // true
type V2 = Valid<"a.">;   // false

API'yi Geçerlilikle Sınırlandırma

Bir işlev parametresini kısıtlamak için geçerlilik türünü kullanın: geçerli dizeler türlerini korur; geçersiz olanlar never türüne indirgenir ve bu nedenle çağrı derlenmez.

declare function path<S extends string>(
  p: Valid<S> extends true ? S : never
): void;

path("user.name"); // ok
path("user.");     // Error: argument is never

Bilinmeyen Belirteçleri Reddetme

İzin verilen karakterleri de kısıtlayabilirsiniz. Yalnızca bilinen bölüm desenleriyle eşleştirin; diğer her şey reddeden bir türe indirgenir.

type Allowed = "user" | "order" | "name" | "items";
type CheckSeg<S extends string> = S extends Allowed ? true : false;

İşleçleri Doğrulama

"age > 18" gibi bir ifade DSL'si için işleci bir şablon değişmeziyle eşleştirin ve izin verilen bir kümede bulunduğundan emin olun. Eşleştirici (sol boşluk O boşluk sağ), gerçek kodda ters tırnaklı bir şablon değişmezidir; burada onu CondMatch olarak gösteriyoruz.

type Op = ">" | "<" | "=" | ">=" | "<=";

// Real TS: backtick pattern -> left, " ", infer O, " ", right.
type IsCond<S extends string> =
  S extends CondMatch<infer O>
    ? O extends Op ? true : false
    : false;

type C1 = IsCond<"age > 18">; // true
type C2 = IsCond<"age ! 18">; // false

Denetimleri Birleştirme

Gerçek doğrulayıcılar birkaç koşulu kesiştirir: boş olmayan bölümler, izin verilen belirteçler ve dengeli yapı. Bunların her biri koşullu bir türdür; bunları mantıksal yardımcı türlerle birleştirin.

type And<A, B> = A extends true ? (B extends true ? true : false) : false;

Özyineleme Sınırları

Tür düzeyindeki özyinelemenin derinlik sınırları vardır. Çok uzun dizeler için derleyici, “tür örneklemesi aşırı derecede derin” hatasını verebilir. Ayrıştırılan girdileri sınırlı tutun veya dil bilgisini basitleştirin.

Çalışma Zamanı Ayrıştırmasından Daha İyi

Çalışma zamanı ayrıştırıcısı yalnızca hatalı dize değerlendirildiğinde şikâyet eder. Derleme zamanı doğrulaması, dize değişmezini yazdığınız anda tam düzenleyici geri bildirimiyle reddeder ve çalışma zamanı maliyeti oluşturmaz.

Bu Neden Önemli

Birçok DSL dize girdilerini kabul eder (yollar, sorgular, biçimler). Yapılarını tür sisteminde doğrulamak, yazım hatalarını ve hatalı ifadeleri program çalışmadan önce yakalar ve bir sınıf çalışma zamanı hatasını derleme hatasına dönüştürür.

Hızlı Kontrol

Derleme zamanı girdi doğrulamasını ne kadar anladığınızı kontrol edin.

Özet

DSL girdisini çalışma zamanından önce, dize değişmezlerini şablon değişmezi türleri ve infer ile ayrıştırıp bölümleri ve işleçleri koşullu türlerle denetleyerek doğruladınız. Bir işlev parametresini geçerlilik türüne bağlamak, hatalı ifadelerin never türüne indirgenmesini ve derlenememesini sağlar; bunu yaparken özyineleme sınırlarına dikkat etmeniz gerekir.

Sıkça Sorulan Sorular

“Derleme Zamanında Girdi Doğrulama” dersi ücretsiz mi?

Evet — “Derleme Zamanında Girdi Doğrulama” 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.

“Derleme Zamanında Girdi Doğrulama” dersinde ne öğreneceğim?

Biçimi bozuk DSL ifadelerini çalışma zamanından önce reddedin. 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 3. dersidir.

“Derleme Zamanında Girdi Doğrulama” 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

  1. Tür Düzeyi DSL Nedir?
  2. Akıcı Sorgu DSL'si Tasarlama
  3. Derleme Zamanında Girdi Doğrulama
  4. Tür Düzeyi DSL'lerde Hata Mesajları
← TypeScript Academy Sayfasına Dön