never Türü ve İmkânsız Durumlar
Ulaşılamayan kodu ve imkânsız değerleri never ile modelleyin.
never Türü ve İmkânsız Durumlar, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.
never Türü
never, boş türdür; hiçbir zaman gerçekleşemeyecek değerleri temsil eder. never'ın kendisi dışında hiçbir değer never'a atanamaz. Gerçekleşmesi imkânsız olması gereken durumları işaretler.
// You cannot create a value of type never
function crash(): never {
throw new Error('boom');
}
try { crash(); } catch (e) { console.log('caught'); }Hiç Geri Dönmeyen İşlevler
Her zaman throw kullanan bir işlev normal biçimde hiç geri dönmez; bu nedenle dönüş türü never'dır. Bu, çağıranlara ve derleyiciye yürütmenin burada durduğunu bildirir.
function fail(message: string): never {
throw new Error(message);
}
try { fail('invalid'); } catch (e) { console.log('handled'); }Sonsuz Döngüler never Döndürür
Sonsuz döngü içeren bir işlev de hiç geri dönmez ve bu nedenle onun türü de never olur. Derleyici, denetim akışının bu işlevin ötesinde devam edemeyeceğini algılar.
function listen(): never {
while (true) {
// forever
break; // (break added so the demo terminates)
}
throw new Error('stopped');
}
console.log('listen has return type never');never ve void
never ile void'u karıştırmayın. void türündeki bir işlev geri döner; yalnızca kullanışlı bir değer üretmez. never türündeki bir işlev ise hiç geri dönmez; hata fırlatır veya sonsuza kadar döngüde kalır.
function logIt(): void {
console.log('done'); // returns normally
}
function abort(): never {
throw new Error('stop'); // never returns
}
logIt();
try { abort(); } catch (e) { console.log('ok'); }Tüm Durumları Kapsama Denetimlerinde never
never türünün en pratik kullanımı, tüm durumları kapsama denetimidir. Bir switch ifadesinin varsayılan dalında değişkeni bir never türüne atayın. Tüm durumlar ele alınmışsa değişken zaten never türündedir ve kod derlenir.
type Shape = 'circle' | 'square';
function area(s: Shape): string {
switch (s) {
case 'circle': return 'pi r^2';
case 'square': return 'a^2';
default:
const _check: never = s; // ok: all handled
return _check;
}
}
console.log(area('square'));Eksik Durumları Yakalama
Birisi yeni bir birleşim üyesi ekler ancak bir durumu ele almayı unutursa, geriye kalan değer artık never türünde olmaz ve atama derlenemez. never denetimi sessiz bir boşluğu görünür bir hataya dönüştürür.
type Shape = 'circle' | 'square' | 'triangle';
// If 'triangle' case is missing, assigning s to never
// would error: 'triangle' is not assignable to never.
console.log('Add a case for every member');İmkânsız Birleşim Dallarında never
Daraltma tüm olasılıkları ortadan kaldırdığında geriye kalan tür never olur. Derleyici bu dalın erişilemez olduğunu bilir; bu da mantık hatalarını ortaya çıkarabilir.
function check(x: string | number): void {
if (typeof x === 'string') {
console.log('string');
} else if (typeof x === 'number') {
console.log('number');
} else {
// x is never here
console.log('unreachable');
}
}
check('hi');Alt Tür Olarak never
never, alt türdür: var olamayacak bir değer her şeyle boşlukta uyumlu olduğundan diğer tüm türlere atanabilir. Bu nedenle bir throw ifadesi herhangi bir ifade konumunda yer alabilir.
function getOrThrow(v: string | null): string {
return v ?? fail();
}
function fail(): never {
throw new Error('missing');
}
console.log(getOrThrow('value'));Birleşimleri never'a Filtreleme
Koşullu ve eşlenmiş türlerde never, “bunu kaldır” anlamına gelir. never ile birleşim oluşturmak hiçbir şeyi değiştirmez: T | never yalnızca T'dir. Bu, onu filtreleme için doğal bir seçenek hâline getirir.
type Keep<T> = T extends string ? T : never;
type R = Keep<'a' | 1 | 'b'>; // 'a' | 'b'
const x: R = 'a';
console.log(x);İmkânsız Durumları Modelleme
Geçersiz birleşimlerin temsil edilememesi için nesne şekillerinde never kullanın. Burada “yükleniyor” durumu aynı anda veri taşıyamaz; çünkü tür bunu yasaklar.
type State =
| { status: 'loading'; data?: never }
| { status: 'ready'; data: number };
const s: State = { status: 'ready', data: 7 };
console.log(s);never Yeniden Düzenleme Güvenliğini Artırır
never ile yapılan tüm durumları kapsama denetimleri bir durum eksik olduğunda başarısız olduğu için yeniden düzenlemeyi daha güvenli hâle getirir: bir birleşimi genişlettiğinizde derleyici, güncellenmesi gereken her yeri gösterir.
type Cmd = 'start' | 'stop';
function run(c: Cmd): string {
if (c === 'start') return 'starting';
if (c === 'stop') return 'stopping';
const _x: never = c;
return _x;
}
console.log(run('start'));Kısa Kontrol
never türü konusundaki anlayışınızı sınayın.
Tekrar: `never`
never türünün:
- boş tür olduğunu; hiçbir değerin never türünde olamayacağını,
- hata fırlatan veya sonsuza kadar döngüde kalan işlevlerin dönüş türü olduğunu,
- switch varsayılanlarındaki eksiksizlik denetimlerini mümkün kıldığını,
- imkânsız daraltma dallarında göründüğünü ve tür mantığında birleşim türlerini filtrelediğini öğrendiniz.
Sırada void türüne ve bunun arasındaki farka bakacağız.
function assertNever(x: never): never {
throw new Error('Unexpected: ' + String(x));
}
console.log('assertNever guards exhaustiveness');Sıkça Sorulan Sorular
“never Türü ve İmkânsız Durumlar” dersi ücretsiz mi?
Evet — “never Türü ve İmkânsız Durumlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.
“never Türü ve İmkânsız Durumlar” dersinde ne öğreneceğim?
Ulaşılamayan kodu ve imkânsız değerleri never ile modelleyin. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“never Türü ve İmkânsız Durumlar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- unknown ve any'yi Anlama
- never Türü ve İmkânsız Durumlar
- İşlevlerde void Türü
- unknown Türünü Tür Güvenli Şekilde Ele Alma