yoklateknik mülakat

Frontend Typescript Generics Mülakat Soruları

75 doğrulanmış Frontend Typescript Generics 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 GenericsZorluk 1
function identity<T>(x: T): T { return x; } yazmanın function identity(x: any): any { return x; }'e göre temel faydası nedir?
  • aGeneric sürüm çalışma zamanında daha hızlı çalışır
  • bGeneric sürüm, girdinin spesifik tipini return değerinde korur
  • cGeneric sürüm, any ile tamamen aynı şekilde her tipin kısıtlamasız geçmesine izin verir
  • dGeneric sürüm sadece class metotları için gerekli, düz fonksiyonlar için değil
Açıklama:any ile fonksiyonun return tipi her zaman any'dir — TypeScript neyin geçildiğini takip etmeyi kaybeder, bu yüzden identity(5) + 1 ve identity(5).toUpperCase() ikisi de hatasız type-check eder. T ile derleyici gerçekte geçilen argümanın tipini yakalar ve aynı tipi döndürür, yani identity(5) çağrısı number döner, derleyicinin identity(5).toUpperCase()'ı hata olarak yakalamasını sağlar.
Typescript GenericsZorluk 1
function first<T>(arr: T[]): T {
  return arr[0];
}
const result = first([1, 2, 3]);

TypeScript result için hangi tipi çıkarır?
  • aany
  • bT
  • cnumber
  • dnumber[]
Açıklama:TypeScript T'yi first'e geçilen argümandan çıkarır — [1, 2, 3] bir number[] olduğu için T, number olarak çıkarılır, dolayısıyla first'in return tipi number'a çözülür. Açık bir tip argümanına gerek yok; çıkarım bunu çağrı noktasından otomatik yapar.
Typescript GenericsZorluk 1
function wrap<T>(x: T): T[] {
  return [x];
}
const result = wrap("hi");

result hangi tipe sahip olur?
  • astring[]
  • bstring
  • cT[]
  • dany[]
Açıklama:T, "hi" argümanından çıkarılır — bu string tipindedir, yani T, string olur ve return tipi T[], string[]'e çözülür. TypeScript'in çıkarımı çağrı başına gerçekleşir — sonraki bir wrap(5) çağrısı bağımsız olarak T'yi number çıkarır, number[] verir.
Typescript GenericsZorluk 2
function identity<T>(x: T): T {
  return x;
}
identity<string>(5);

Bu satır tip kontrolünden geçerken ne olur?
  • aSorunsuz derlenir; T, açık <string>'e rağmen number olarak çıkarılır
  • bSorunsuz derlenir; TypeScript 5'i sessizce "5"'e çevirir
  • cSadece çalışma zamanında hata verir, derleme sırasında değil
  • dBir tip hatasıdır
Açıklama:Bir tip argümanı açıkça verildiğinde (identity<string>), TypeScript argümandan çıkarım yapmak yerine bunu kullanır ve gerçek argümanı buna karşı kontrol eder. 5 (tip number), string'e atanabilir olmadığı için bu derlenemez — sessiz bir dönüşüm ya da sadece-runtime bir sorun değil, derleme-zamanı bir tip hatasıdır.
Typescript GenericsZorluk 2
class Box<T> {
  constructor(public value: T) {}
}
const b = new Box(5);

b.value hangi tipe sahip olur?
  • aT
  • bnumber
  • cany
  • dBox<T>
Açıklama:Box<T> generic bir sınıftır; new Box(5) ile oluşturulunca TypeScript T'yi constructor argümanı 5'ten (tip number) çıkarır, yani bu instance Box<number>'dır ve b.value tip number'a sahiptir. Açık bir new Box<number>(5) gerekmedi — çıkarım class constructor'ları için de fonksiyonlarla aynı şekilde çalışır.
Typescript GenericsZorluk 2
function pick<T extends { id: number }>(x: T): number { return x.id; } içinde T extends { id: number } ne anlama gelir?
  • aT, başka hiçbir property'ye izin verilmeden tam olarak { id: number } tipi olmalıdır
  • bT isteğe bağlıdır ve verilmezse { id: number }'a varsayılan olur
  • cT, en azından number tipinde bir id property'sine sahip olduğu sürece herhangi bir tip olabilir
  • dT, { id: number } adlı bir sınıfın alt sınıfı olmalıdır
Açıklama:Bir generic kısıt (extends), T'nin ne olabileceğini kısıtlar ama tam eşleşme gerektirmez — T'nin sadece kısıta atanabilir olması yeterlidir, yani en azından bir id: number property'sine sahip olması gerekir. Fazladan property'ler sorun değil: { id: number, name: string } de bu kısıtı sağlar.

2925 soruluk Frontend bankasında kendini sına.

Mülakata başla