Bunu yapmak için never, oluşmaması gereken değerleri temsil eden türü (TypeScript 2.0'da tanıtılan) kullanacağız.
İlk adım bir fonksiyon yazmaktır:
function assertUnreachable(x: never): never {
throw new Error("Didn't expect to get here");
}
Ardından, defaultdurumda (veya eşdeğeri, anahtarın dışında) kullanın:
function getColorName(c: Color): string {
switch(c) {
case Color.Red:
return 'red';
case Color.Green:
return 'green';
}
return assertUnreachable(c);
}
Bu noktada bir hata göreceksiniz:
return assertUnreachable(c);
~~~~~~~~~~~~~~~~~~~~~
Type "Color.Blue" is not assignable to type "never"
Hata mesajı, kapsamlı anahtarınıza eklemeyi unuttuğunuz durumları gösterir! Birden fazla değeri bırakırsanız, örn Color.Blue | Color.Yellow.
Kullanıyorsanız , aramanın önünde buna strictNullChecksihtiyacınız olacağını unutmayın (aksi takdirde isteğe bağlıdır).returnassertUnreachable
İstersen biraz daha meraklı olabilirsin. Örneğin, ayrımcılığa tabi bir birleşim kullanıyorsanız, hata ayıklama amacıyla onaylama işlevindeki diskriminant özelliğini kurtarmak faydalı olabilir. Şöyle görünüyor:
interface Dog {
species: "canine";
woof: string;
}
interface Cat {
species: "feline";
meow: string;
}
interface Fish {
species: "pisces";
meow: string;
}
type Pet = Dog | Cat | Fish;
function throwBadPet(p: never): never;
// Implementation signature
function throwBadPet(p: Pet) {
throw new Error('Unknown pet kind: ' + p.species);
}
function meetPet(p: Pet) {
switch(p.species) {
case "canine":
console.log("Who's a good boy? " + p.woof);
break;
case "feline":
console.log("Pretty kitty: " + p.meow);
break;
default:
throwBadPet(p);
}
}
Bu güzel bir model çünkü beklediğiniz tüm vakaları ele aldığınızdan emin olmak için derleme zamanı güvenliğini elde ediyorsunuz. Ve eğer gerçekten kapsam dışı bir özellik elde ederseniz (örneğin, bazı JS arayanlar yeni oluşturmuşsa species), faydalı bir hata mesajı atabilirsiniz.