Búsqueda de sitios web

¿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.

Artículos relacionados