yoklateknik mülakat

Frontend Typescript Narrowing Control Flow Mülakat Soruları

75 doğrulanmış Frontend Typescript Narrowing Control Flow mülakat sorusu — cevaplarıyla çöz, açıklamalarıyla öğren, gerçek simülasyonda kendini test et.

Gerçek simülasyonu dene →

Örnek sorular

Typescript Narrowing Control FlowZorluk 1
TypeScript'te bir if bloğu içindeki typeof x === "string" kontrolü, o blok boyunca x'in tipine ne yapar?
  • aHiçbir şey — TypeScript bir değişkenin tipini runtime kontrole göre asla değiştirmez
  • bO blok boyunca x'in tipini string'e daraltır
  • cx'i runtime'da gerçekten string'e dönüştürür, değerini değiştirir
  • dx'in tip anotasyonunu tamamen kaldırır
Açıklama:Bu, TypeScript'in temel daraltma (narrowing) mekanizmasıdır: typeof kontrolü, tanınan tip guard'larından biridir. Kontrolün doğru olduğu dalın içinde, derleyici değişkenin tipini o blok boyunca statik olarak string'e daraltır, böylece cast gerekmeden string'e özgü metotlar kullanılabilir hale gelir.
Typescript Narrowing Control FlowZorluk 1
class Dog { bark(): void {} }
class Cat { meow(): void {} }

function speak(pet: Dog | Cat) {
  if (pet instanceof Dog) {
    pet.bark();
  } else {
    pet.meow();
  }
}

Bu, hatasız derlenir mi?
  • aHayır — instanceof, iki sınıfın union'ını daraltmak için kullanılamaz
  • bHayır — pet.meow() erişilemez kod olarak işaretlenir
  • cEvet — instanceof, else dalında pet'i Cat'e daraltır, bu yüzden meow() geçerlidir
  • dEvet, ama sadece iki sınıf ortak bir temel sınıfı paylaşıyorsa
Açıklama:instanceof, standart bir daraltma guard'ıdır. if dalında pet, Dog'a daralır, bu yüzden bark() geçerlidir. Union'da yalnızca iki üye olduğundan, TypeScript else dalının pet'in Cat olması gerektiği anlamına geldiğini çıkarabilir ve buna göre daraltır — ortak bir temel sınıf gerekmez.
Typescript Narrowing Control FlowZorluk 1
function total(value: number | number[]) {
  if (Array.isArray(value)) {
    return value.reduce((a, b) => a + b, 0);
  }
  return value * 2;
}

Array.isArray(value), if bloğu içinde value'nun tipine ne yapar?
  • avalue'yu number[]'e daraltır, bu yüzden reduce gibi dizi metotları geçerlidir
  • bTip üzerinde hiçbir etkisi yoktur; reduce çağırmak için hâlâ manuel cast gerekir
  • cvalue'yu any[]'e daraltır, number eleman tipini kaybettirir
  • dSadece runtime'da çalışır ve reduce üzerinde derleme hatasına yol açar
Açıklama:Array.isArray, TypeScript tarafından tanınan yerleşik bir tip guard'ıdır. if bloğu içinde value'yu number | number[]'den number[]'e daraltır, bu yüzden dizi metotları tam tip bilgisiyle doğrudan kullanılabilir (elemanların number olduğu bilinir).
Typescript Narrowing Control FlowZorluk 1
function greet(name: string | undefined) {
  if (name) {
    console.log(name.toUpperCase());
  }
}

if bloğu içinde name'in daraltılmış tipi nedir?
  • astring | undefined, değişmez
  • bundefined
  • cunknown
  • dstring
Açıklama:Düz bir truthiness kontrolü (if (name)) tanınan bir daraltma kalıbıdır: falsy değerleri hariç tutar, bu da string | undefined için undefined'ı hariç tutmak demektir (boş string "" de falsy'dir ama burada ayrı bir tip olmadığı için tipi değiştirmez). Blok içindeki kalan tip string'dir.
Typescript Narrowing Control FlowZorluk 1
type Cat = { meow(): void };
type Robot = { beep(): void };

function activate(entity: Cat | Robot) {
  if ("meow" in entity) {
    entity.meow();
  } else {
    entity.beep();
  }
}

if dalında entity'yi Cat'e daraltan nedir?
  • aTypeScript nesne-tipi union'ları bu şekilde daraltamaz; bu bir derleme hatasıdır
  • bin operatörü, "meow" property'sinin nesnenin tipinde var olup olmadığını kontrol eder
  • cTypeScript bunu entity değişken adından çıkarır
  • dSadece Cat ve Robot'un ikisinin de tam olarak bir metodu olduğu için çalışır
Açıklama:in operatörü, nesne tipleri için tanınan bir daraltma guard'ıdır: "prop" in obj, tip seviyesinde hangi union üyesinin/üyelerinin o property'yi tanımladığını kontrol eder. Sadece Cat'in meow'u olduğundan, TypeScript if dalında entity'yi Cat'e, else'de Robot'a daraltır.
Typescript Narrowing Control FlowZorluk 1
Bir fonksiyon id: string | number alıyor ve sadece number üzerinde var olan .toFixed(2)'yi çağırması gerekiyor. Bunu derlenir hale getirmenin doğru yolu nedir?
  • aÖnce hiçbir şey kontrol etmeden id'yi as number ile cast'lemek
  • b.toFixed(2)'yi doğrudan çağırmak; TypeScript runtime'da string'i otomatik dönüştürür
  • cÖnce typeof id === "number" kontrolü yapıp, .toFixed(2)'yi o dal içinde çağırmak
  • dParametre tipini any yapıp tüm metot çağrılarına izin vermek
Açıklama:Deyimsel (idiomatic) yaklaşım bir tip guard'ıdır: typeof id === "number", o dal içinde id'yi number'a daraltır, .toFixed(2)'yi cast gerekmeden geçerli kılar. Kör cast (as number) kontrolü ispatlamak yerine bastırır, any ise tip güvenliğini tamamen atar.

2925 soruluk Frontend bankasında kendini sına.

Mülakata başla