Hesaplama Dili Olarak Türler
Tür sistemini saf işlevsel bir dil olarak anlayın.
Hesaplama Dili Olarak Türler, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 1. 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ürler Bir Dildir
TypeScript, yan yana yaşayan iki dile sahiptir. Bunlardan biri, zaten bildiğiniz değer düzeyindeki JavaScript'tir. Diğeri ise tamamen derleme zamanında çalışan tür düzeyidir. Bu kursta ikinci dilde programlamayı öğrenirsiniz.
Tür sistemi küçük, saf ve işlevsel bir dildir. Ona türleri girdi olarak verirsiniz ve türleri çıktı olarak hesaplar. Bunun hiçbir parçası çalışma zamanına kalmaz.
type Greeting = "hello";
type Loud = Uppercase<Greeting>;
// Loud is "HELLO" - computed by the type systemTürler Girer, Türler Çıkar
Genel tür, özünde türlerden türlere bir işlevdir. Tür parametresi argümandır ve gövde dönüş değeridir.
Aşağıda Boxed, bir T türü alır ve onu saran bir nesne türü üretir. T değerini aktardığınız bir parametre olarak düşünün.
type Boxed<T> = { value: T };
type A = Boxed<number>; // { value: number }
type B = Boxed<string>; // { value: string }Genel Türler İşlevdir
Değer düzeyindeki bir işlevi tür düzeyindeki bir işlevle karşılaştırın. Yapıları neredeyse aynıdır: parametreler girer, tek bir sonuç çıkar.
- Değer:
const id = (x) => x - Tür:
type Id<T> = T
Tür düzeyindeki Id, ona verdiğiniz şeyi olduğu gibi döndürür.
type Id<T> = T;
type X = Id<boolean>; // boolean
type Y = Id<"abc">; // "abc"Çalışma Zamanı Maliyeti Yok
Tür düzeyindeki her şey, kodunuz çalışmadan önce silinir. JavaScript çıktısında tür hesaplamalarınızdan hiçbir iz bulunmaz. Türleriniz ne kadar ayrıntılı olursa olsun, çalışan programda performans maliyeti oluşmaz.
Tür düzeyinde programlamaya bazen ücretsiz denmesinin nedeni budur: yalnızca derleyiciyi etkiler, paketi hiçbir zaman etkilemez.
type Pair<T> = [T, T];
const p: Pair<number> = [1, 2];
// Compiled JS is just: const p = [1, 2];
console.log(p);Birden Çok Parametre
Tür düzeyindeki işlevler de sıradan işlevler gibi birden çok parametre alabilir. Burada Merge, iki nesne türünü alır ve bunları birleştirir.
Bunu şöyle okuyun: A ve B verildiğinde, her ikisinin de tüm özelliklerini içeren bir nesne döndürülür.
type Merge<A, B> = A & B;
type User = { id: number };
type Named = { name: string };
type NamedUser = Merge<User, Named>;
// { id: number; name: string }Parametreler için Varsayılanlar
Tür parametreleri, tıpkı varsayılan işlev argümanları gibi varsayılan değerlere sahip olabilir. Çağıran taraf argümanı belirtmezse varsayılan değer kullanılır.
type List<T = string> = T[];
type A = List; // string[]
type B = List<number>; // number[]Kısıtlar Koruyucudur
extends içeren bir kısıt, hangi türlerin aktarılabileceğini sınırlar. Bu, bir işlev argümanını kullanmadan önce doğrulamanın tür düzeyindeki karşılığıdır.
HasId yalnızca id özelliğine zaten sahip olan türleri kabul eder; böylece gövde bu özelliği güvenle okuyabilir.
type GetId<T extends { id: number }> = T["id"];
type A = GetId<{ id: number; name: string }>; // number
// GetId<{ name: string }> would be a compile errorYalnızca Açıklama Değil, Hesaplama
Yeni başlayanlar türleri yalnızca değerleri etiketlemek için kullanır. Tür düzeyinde programlama ise yanıtları hesaplamak için türleri kullanır. Örneğin yerleşik ReturnType yardımcı türü, bir işlev türünü inceler ve sonuç türünü çıkarır.
type Fn = (a: number) => string;
type R = ReturnType<Fn>; // string
type Fn2 = () => boolean;
type R2 = ReturnType<Fn2>; // booleanÖzellikler Üzerinde Eşleme
Eşlenmiş türler, bir nesne türünün her özelliğini dönüştürmenizi sağlar. Bu, tür dilindeki bir döngüdür. Stringify, her değer türünü string türüne dönüştürür.
type Stringify<T> = { [K in keyof T]: string };
type Input = { a: number; b: boolean };
type Out = Stringify<Input>; // { a: string; b: string }Saf ve Öngörülebilir
Tür dili saftır: aynı girdiler, hiçbir yan etki olmadan her zaman aynı çıktı türünü üretir. Değişiklik, IO veya zaman söz konusu değildir. Bu saflık, tür düzeyindeki programları öngörülebilir ve birleştirilebilir kılar.
Saflık sayesinde türler hakkında, matematikte düşündüğünüz gibi, yerine koyma yoluyla düşünürsünüz.
type Square<T extends { area: number }> = T["area"];
// Always the same result for the same input shapeNeden Önemlidir
Bu ikinci dilde ustalaşmanız, derleyicinin ek bir ücret talep etmeden uyguladığı kuralları ifade etmenizi sağlar: geçerli rotalar, tüm durumları kapsayan seçim ifadeleri, güvenli dize işlemleri ve yanlış kullanılamayan uygulama programlama arayüzleri. Bu kursun geri kalanında gereken araç kutusu oluşturulacaktır.
Temel düşünce: bir tür, tür dilinde bir değerdir ve bir jenerik, bir işlevdir.
type NonEmpty<T extends unknown[]> =
T extends [unknown, ...unknown[]] ? T : never;
// Encodes a rule: the tuple must have at least one elementKısa Değerlendirme
Türleri bir hesaplama dili olarak ne kadar anladığınızı sınayın.
Özet
TypeScript türlerinin, derleme zamanında çalışan saf işlevsel bir dil oluşturduğunu öğrendiniz.
- Jenerikler işlevlerdir: girdi olarak türleri alır, çıktı olarak türleri üretir.
- Parametreler varsayılan değerleri ve
extendskısıtlarını destekler. - Eşlenmiş türler özellikler üzerinde döngü kurar.
- Her şey silindiği için çalışma zamanı maliyeti yoktur.
Sırada bu dile bir koşul deyimi eklemek var: koşullu türler.
Sıkça Sorulan Sorular
“Hesaplama Dili Olarak Türler” dersi ücretsiz mi?
Evet — “Hesaplama Dili Olarak Türler” 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.
“Hesaplama Dili Olarak Türler” dersinde ne öğreneceğim?
Tür sistemini saf işlevsel bir dil olarak anlayı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 1. dersidir.
“Hesaplama Dili Olarak Türler” 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
- Hesaplama Dili Olarak Türler
- Tür Düzeyi Koşulluları
- Tür Düzeyi Özyineleme
- Dağıtmalı Koşullu Türler