Meydan okuma 3: Tür sistemleri
- TypeScript kursu
- Orta seviye
- Ders 88/89
- 6 dk
Mapped, conditional ve infer'ı birleştiren bir görev çözersin.
Tür sistemleri meydan okuması
Bu meydan okumada mapped types, conditional types ve infer anahtar kelimesini birleştiren görevler çözeceksin. Mapped type ile bir türün tüm alanlarını dönüştürmeyi, conditional type ile tür bazlı mantık kurmayı ve infer ile bir türden başka bir tür çıkarmayı öğrendin.
Uygulama ReadOnly mapped type
ReadOnly adında bir mapped type tanımla: { readonly [K in keyof T]: T[K] }. Nokta interface'i x: number ve y: number içersin. p değişkeni ReadOnly<Nokta> türünde olsun ve değeri { x: 3, y: 4 } olsun. p.x + p.y sonucunu console.log ile yazdır.
Başlangıç kodu
// ReadOnly adinda mapped type tanimla
// Nokta adinda interface tanimla
// p nesnesi readonly Nokta olsun
// p.x + p.y yazdirÖrnek çözüm
type ReadOnly<T> = { readonly [K in keyof T]: T[K] };
interface Nokta { x: number; y: number; }
const p: ReadOnly<Nokta> = { x: 3, y: 4 };
console.log(p.x + p.y);Beklenen çıktı
7
Uygulama infer ile eleman türü
Eleman adında bir conditional type tanımla: T extends (infer U)[] ? U : never. R türünü Eleman<string[]> olarak tanımla. deger değişkeni R türünde ve değeri "merhaba" olsun. deger'i console.log ile yazdır.
Başlangıç kodu
// Eleman adinda conditional type tanimla
// dizi türünden eleman türünü cikar
// degilse bos tür olsun
// R türü string dizisi elemani olsun
// deger: R = "merhaba"
// deger yazdirÖrnek çözüm
type Eleman<T> = T extends (infer U)[] ? U : never;
type R = Eleman<string[]>;
const deger: R = "merhaba";
console.log(deger);Beklenen çıktı
merhaba
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir conditional type'ta Promise'ten değer türünü çıkarmak için hangi anahtar kelime kullanılır?
- typeof
- keyof
- infer Doğru cevap
- extends
Açıklama: infer anahtar kelimesi bir conditional type içinde tür çıkarımı yapar; örneğin T extends Promise<infer U> ? U : never.
2 infer ile tür çıkarma
type Eleman<T> = T extends (____ U)[] ? U : never;
type Eleman<T> = T extends (infer U)[] ? U : never;
Açıklama: infer anahtar kelimesi conditional type içinde bir tür değişkeni tanımlar ve çıkarılan türü o değişkene atar.
3 Tür sistem kavramları
| Kavram | Anlamı |
|---|---|
mapped |
[K in keyof T] |
conditional |
T extends U ? X : Y |
infer |
Tür çıkarma |
keyof |
Anahtar kümesi |