CodeBlanks Logo Icon CodeBlanks

Meydan okuma 3: Tür sistemleri

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

index.ts
// ReadOnly adinda mapped type tanimla
// Nokta adinda interface tanimla
// p nesnesi readonly Nokta olsun
// p.x + p.y yazdir

Örnek çözüm

index.ts
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

index.ts
// 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

index.ts
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

Soru
type Eleman<T> = T extends (____ U)[] ? U : never;
Cevap
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

Orta seviye bölümündeki tüm dersler