0Pricing
TypeScript Academy · Ders

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

infer kullanarak dizelerden yapılandırılmış veriler çıkarın.

Şablon Değişmezleriyle Ayrıştırma, 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.

Bölmeden Yapıya

Bölme işlemi size bölümlerden oluşan bir demet verir. Ayrıştırma ise daha ileri gider: bir dize türünden adlandırılmış, yapılandırılmış veriler çıkarır. İlgilendiğimiz parçaları almak için birden çok infer değişkeni içeren şablon değişmezi kalıpları kullanırız.

Gösterim: Gerçek TypeScript, şablon değişmezi türlerini dolar-süslü parantez boşlukları içeren, ters tırnaklarla sınırlandırılmış dizeler olarak yazar. Bu parçalarda bu kalıbı Tpl<...> biçiminde gösteriyor ve her bölümü sırayla listeliyoruz; örneğin, önce değişmez ön ekle ve ardından Rest ile eşleşen bir ters tırnak şablonu Tpl<'prefix', infer Rest> olarak gösterilir.

type KeyValue<S> =
  S extends Tpl<infer K, '=', infer V> ? { key: K; value: V } : never;
// Tpl<K, '=', V> matches K, an equals sign, then V

type X = KeyValue<'name=alice'>; // { key: 'name'; value: 'alice' }

Birden Çok Çıkarım Noktası

Tek bir kalıp aynı anda birkaç alanı yakalayabilir. "GET /users" ifadesini ayrıştırmak için yöntemi ve yolu tek bir koşullu türde çıkarın.

type Request<S> =
  S extends Tpl<infer Method, ' ', infer Path>
    ? { method: Method; path: Path }
    : never;
// Tpl<Method, ' ', Path> matches the method, a space, then the path

type X = Request<'GET /users'>; // { method: 'GET'; path: '/users' }

Çıkarılan Bölümleri Daraltma

Çıkarılan bir değişkeni satır içinde extends ile kısıtlayabilir, böylece yalnızca belirli biçimlerle eşleşmesini sağlayabilirsiniz. Burada yöntemin bilinen bir fiil olması gerekir.

type Method = 'GET' | 'POST';
type Parse<S> =
  S extends Tpl<(infer M extends Method), ' ', infer P>
    ? { method: M; path: P }
    : never;
// the inferred M is constrained to Method inside the template pattern

type X = Parse<'POST /x'>; // { method: 'POST'; path: '/x' }

Anahtar-Değer Çiftlerini Ayrıştırma

Bölme ve ayrıştırmayı birleştirin: bir sorgu dizesini çiftlere ayırın, ardından her çifti anahtar ve değere ayrıştırın. Sonuç, yapılandırılmış girdilerden oluşan bir demettir.

type Pair<S> =
  S extends Tpl<infer K, '=', infer V> ? [K, V] : [S, ''];
// Tpl<K, '=', V> splits a 'key=value' string literal type

type X = Pair<'page=2'>; // ['page', '2']

Çiftlerden Nesne Oluşturma

Bir anahtar-değer çifti demetini, eşlenmiş/kesişimli bir biriktirici kullanarak nesne türüne dönüştürün. Her çift bir özellik ekler.

type FromPairs<T extends [string, string][]> =
  T extends [[infer K extends string, infer V], ...infer R extends [string, string][]]
    ? { [P in K]: V } & FromPairs<R>
    : {};

type X = FromPairs<[["a", "1"], ["b", "2"]]>; // { a: "1" } & { b: "2" }

Sorgu Dizesini Ayrıştırma

Hepsini bir araya getirin: "&" üzerinde bölün, her parçayı "=" üzerinde ayrıştırın ve ardından nesneyi oluşturun. Derleyici artık bir sorgu dizesi değişmezinin tam anahtarlarını bilir.

type ParseQuery<S extends string> =
  FromPairs<{ [I in keyof SplitAmp<S>]: Pair<SplitAmp<S>[I] & string> }>;
// where SplitAmp splits on "&" (from previous lesson)

Sayıları Çıkarma

Çıkarılan bölümler her zaman dize değişmezi türleridir. Bir bölümü sayı olarak ele almak için sayısal bir kalıpla eşleşip eşleşmediğini kontrol eder veya onu yalnızca digits kabul eden bir kısıtlamadan geçirirsiniz. Değer, değişmez tür olarak kalır.

type IsNumeric<S extends string> =
  S extends Tpl<number> ? true : false;
// Tpl<number> is a template literal type that matches any numeric string

type X = IsNumeric<'42'>; // true
type Y = IsNumeric<'4a'>; // false

İsteğe Bağlı Bölümler

İsteğe bağlı bölümleri ele almak için kalıpların birleşimini kullanın. Daha kapsamlı kalıbı önce deneyin; eşleşmezse daha basit olana geçin.

type ParsePath<S> =
  S extends Tpl<infer Base, '?', infer Query>
    ? { base: Base; query: Query }
    : { base: S; query: '' };
// Tpl<Base, '?', Query> matches an optional query after a question mark

type X = ParsePath<'/x?a=1'>; // { base: '/x'; query: 'a=1' }

Boşluklar ve Özel Durumlar

Gerçek dizelerde gereksiz boşluklar bulunabilir. Baştaki ve sondaki boşlukların çıkarılan alanları bozmaması için ayrıştırıcınızı önceki dersteki Trim ile birleştirin.

type CleanKey<S extends string> = Trim<S>;
// Apply Trim to each inferred segment before using it

Bunun Gücü

Şablon değişmezi ayrıştırması, derleyicinin biçimleri anlamasını sağlar: tarihleri, rotaları, ortam anahtarlarını ve SQL parçalarını. Hatalı yazılmış dizeler derleme hatalarına dönüşür ve sonraki türler ayrıştırılan yapıya bağlı olabilir. Dize değişmezi, türü belirlenmiş bir değere dönüşür.

type Event<S> =
  S extends Tpl<infer Domain, ':', infer Action>
    ? { domain: Domain; action: Action }
    : never;
// Tpl<Domain, ':', Action> matches 'domain:action'
type X = Event<'user:created'>; // { domain: 'user'; action: 'created' }

Ayrıştırıcıları Birleştirme

Tıpkı değer düzeyi birleştiricilerinde olduğu gibi, tür düzeyi ayrıştırıcılar da birlikte kullanılabilir. Önce bölün, sonra her parçayı ayrıştırın ve ardından bir nesne oluşturun. Her adım küçük bir koşullu türdür; birlikte tam ve türü belirlenmiş bir ayrıştırıcı oluştururlar.

// Split -> Pair -> FromPairs is a parser pipeline at the type level

Hızlı Kontrol

Şablon değişmezi ayrıştırması konusundaki anlayışınızı sınayın.

Özet

Dize türlerinden yapılandırılmış veriler çıkardınız.

  • Birden çok infer noktası, tek bir kalıpta adlandırılmış alanları yakalar.
  • Çıkarılan bölümler satır içindeki extends ile daraltılabilir.
  • Split, Pair ve FromPairs bir sorgu ayrıştırıcısı oluşturacak şekilde birlikte kullanılabilir.
  • Trim ve sayısal kontroller özel durumları ele alır.

Sıradaki konu: tam bir mini rota ayrıştırıcısı.

Sıkça Sorulan Sorular

“Şablon Değişmezleriyle Ayrıştırma” dersi ücretsiz mi?

Evet — “Şablon Değişmezleriyle Ayrıştırma” 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.

“Şablon Değişmezleriyle Ayrıştırma” dersinde ne öğreneceğim?

infer kullanarak dizelerden yapılandırılmış veriler çıkarın. 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.

“Şablon Değişmezleriyle Ayrıştırma” 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. Ayrıştırıcı Birleştirici Kavramları
  2. Tür Düzeyinde Dize Bölme
  3. Şablon Değişmezleriyle Ayrıştırma
  4. Mini Tür Düzeyi Rota Ayrıştırıcısı
← TypeScript Academy Sayfasına Dön