¿Cuál es el beneficio de nunca en TypeScript?
Acabo de comenzar con TypeScript y leí sobre el tipo never. Pero no entendí el propósito real de esto. A partir de esto
Tengo, cualquier código que no se va a ejecutar o que es inalcanzable se marca como nunca
// Type () => never
const sing = function() {
while (true) {
console.log("Never gonna give you up");
console.log("Never gonna let you down");
console.log("Never gonna run around and desert you");
console.log("Never gonna make you cry");
console.log("Never gonna say goodbye");
console.log("Never gonna tell a lie and hurt you");
}
};
La función en el código anterior tiene un bucle infinito, por lo que se marcará como nunca, entonces, ¿cuál es el beneficio de esto?
Respuesta #1
Para tu ejemplo, el beneficio es garantizar que no crearás una fuga desde tu función.
Intenta establecer explícitamente el tipo de retorno never.
const sing = function():never {
while (true) {
console.log("Never gonna give you up");
console.log("Never gonna let you down");
console.log("Never gonna run around and desert you");
console.log("Never gonna make you cry");
console.log("Never gonna say goodbye");
console.log("Never gonna tell a lie and hurt you");
break; // Error
}
};
Respuesta #2
Hay algunos casos de uso de la palabra clave "Never" en Typescript.
El tipo never se utiliza cuando estás seguro de que algo nunca va a ocurrir.
✅ Cláusulas de guardia: te obliga a verificar todos los casos posibles.
✅ La función nunca devolverá nada. Tiene algo que hacer todo el tiempo (bucle infinito)
✅ La función siempre lanza un error.
// 1) Guard Clauses (forces you to check all possible cases)
type CurrencyOptions = "EURO" | "USD" | "AZN"
function getRate(currency: CurrencyOptions) {
switch (currency) {
case "EURO":
return 1.80
case "USD":
return 1.70
case "AZN":
return 1.20
default:
const _unreachable: never = currency // will get Type Error if you remove one of the cases
throw "Not found"
}
}
// 2) function will Throw error
function throwError(errorMsg: string): void {
throw new Error(errorMsg);
}
// 3) function will Never end
function keepProcessing(): never {
while (true) console.log('Never ends.')
}
La diferencia principal entre never y void es que:
Void - la función no devuelve nada o devuelve explícitamente undefined.
Nunca - la función nunca devuelve nada en absoluto.
