ProgramlamaFullstack Geliştirici

TypeScript'te never ve void türleri arasındaki farkı açıklayın. Her birini ne zaman ve neden kullanmalısınız?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

void ve never TypeScript'te farklı türlerdir:

  • void genellikle bir değer döndürmeyen fonksiyonlar için dönen tür olarak kullanılır, yani fonksiyon tamamlanır ama bir değer döndürmez.
  • never bir fonksiyonun (veya ifadenin) asla başarılı bir şekilde tamamlanmayacağını ifade eder: ya her zaman bir istisna fırlatır ya da yönetimi asla geri döndürmez (örneğin, sonsuz döngü).

Örnekler:

function log(message: string): void { console.log(message); } function throwError(message: string): never { throw new Error(message); } function infinite(): never { while (true) {} }

never, switch-case türlerini tam olarak kontrol etmek için sıkça kullanılır:

type Shape = { kind: 'circle' } | { kind: 'square' }; function getArea(shape: Shape) { switch (shape.kind) { case 'circle': return 1; case 'square': return 2; default: const _exhaustive: never = shape; // Burada derleyici, bir durumun atlandığını bildirir } } }

Yanıltıcı Soru.

void ve never, fonksiyonun döndürme türleri olarak birbirinin yerini alabilir mi?

Cevap: Hayır. void türüne sahip bir fonksiyon undefined döndürür ya da hiçbir şey döndürmez, ama tamamlanır. never türüne sahip bir fonksiyon asla başarılı bir şekilde tamamlanmaz (hata fırlatır ya da sonsuz döngüye girer).

Örnek:

const fn: () => never = () => { // return; // Hata: 'never' olarak tanımlanan bir fonksiyon geri dönmemelidir. };

Tarih

Analitik sistemde, her zaman bir istisna fırlatan bir doğrulama fonksiyonu void döndüren türü ile tiplenmişti. Bu nedenle geliştiriciler fonksiyonun "geri dönebilir" olduğunu düşündü ve bu yüzden hata kontrolü yapmadılar, bu da hata işleme ve çağrı zincirini yanlış uygulamalarına neden oldu.


Tarih

Bir projede, belirli bir şekilde tiplenmiş döndürme türü bekleyen TypeScript fonksiyonu void yerine never döndüren olarak tanımlandı. Bu nedenle, never olarak tiplenmiş bir geri çağırma ile fonksiyon çağırma girişimi, derleme hatalarına ve API uyumunun kaybına yol açtı.


Tarih

Backend modülünde, daha önce void döndürme türüne sahip bir fonksiyon aracılığıyla istisna fırlatılıyordu. TypeScript'e geçtikten sonra, derleyici bu fonksiyon çağrısından sonra kodun dışında çıkış hakkında uyarıda bulunmadı, bu da "ulaşılamaz" kodda gereksiz satırların ortaya çıkmasına neden oldu — ve yalnızca döndürme türünü never olarak değiştirmek, bu yerleri bulmayı ve kodu temizlemeyi sağladı ve mantıksal hatayı önledi.