void ve never TypeScript'te farklı türlerdir:
Ö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 } } }
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.