No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

0D
11H
6M
24S

Never type

6/22
Recursos

Aportes 12

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Otra forma de ver al tipo de dato never es como aquellas funciones que nunca llegan a ejecutarse por completo

Never Type

El tipo de dato never, m谩s que todo sirve para tipar a una funci贸n que nunca va a finalizar o sencillamente que pueda terminar el programa en el caso de lanar una excepci贸n.

Un ejemplo de ello es cuando queremos manejar un error o cuando ejecutamos un loop infinito, como por ejemplo una validaci贸n de un token de cada x鈥檚 segundos, que es una funci贸n que se ejecuta constantemente, ya que lanzas la funci贸n, esta env铆a el token lo valida, y comienza el timer para hacer el refresh de ese token, si hay un error lanza una excepci贸n y si no contin煤a con la validaci贸n y el timer鈥

// esta funcion no tiene un punto final ya que dispara una excepcion
function error(mensaje: string): never {
    throw new Error(mensaje);
}

// esta funcion no tiene un punto final ya que dispara un error
function fallo(): never {
    return error("Reportar fallo");
}

// esta funcion no finaliza ya que posee un loop infinito
function loopInfinito() : never {
    while(true){}
}```

Si bien esta bueno en caso de funciones donde este tipo de finalizaci贸n de programas es clara (Como en un while true o el throw), no siempre detecta las funciones que son never.

Estos casos los infiere de tipo void aunque su ejecuci贸n sea infinita y detengan la ejecuci贸n del resto del programa.

Infiere void:

const badFor = () => {
  for(let i = 1; i < 10; i){
    console.log(i)
  }
}

Infiere void:
const badRecursion = () => {
if(true){
console.log(鈥極h sh*t here we go again鈥)
badRecursion()
}
}

Si bien TS puede inferir algunas funciones infinitas y que detengan la ejecuci贸n no lo har谩 siempre, por lo que tenemos que seguir haciendo testing 馃槂

withoutEnd()

Encontr茅 hace poco otro caso d贸nde aparece el never, en las propiedades de una clase que se inicialzan con un array vac铆o y no se les define el tipo, as铆:

class Algo {
  miVariable = []; // (property) Algo.miVariable: never[]
}

Por lo que vi, never no es un type que debas declarar como tal.

Es m谩s la inferencia que typescript hace a tu c贸digo y determina que ese proceso nunca va a terminar, bien sea un ciclo infinito o un error que detiene el programa.

El uso mas com煤n de never es cuando por alguna rara razon, necesitamos usar en nuestro codigo un tipado condicional. (conditional-types) ejemplo:

// declaramos un tipo perro
type Dog = {barks : true};
// queremos evaluar un generico que probablemente use union 
// de tipos donde se incluya otros animales
type Animals = Dog | Cat | Wolf;
// Creamos un tipo condicional porque algunos casos
// necesitamos exclusivamente el tipo Dog
type ExtractDogish<A> = A extends { barks: true } ? A : never;
const dog : ExtractDogish<Animals> // Dog 
const cat: ExtractDogish<Animals> // never

Si necesitas crear una funcion infinita, usa este tipo de dato never.

Tengo una inquietud! me sale este error al momento de ejecutar el programa,
"\ts-app\dist\04-never.js:8
throw new Error(message);
^

Error: not match
at fail (D:\Users\User\Documents\cursoTypeScript\ts-app\dist\04-never.js:8:11)"

Pero en el c贸digo no me arroja ningun inconveniente! 驴Alguien tiene idea de que estoy haciendo mal?

este es mi c贸digo;
const fail = (message: string)=>{
throw new Error(message);
}
const example=(input: unknown)=> {
if (typeof input === 鈥榮tring鈥) {
return 鈥榚s un string鈥;
} else if (Array.isArray(input)) {
return 鈥楨s un array鈥;
}
return fail(鈥榥ot match鈥);

}
console.log(example(鈥楬ola鈥));
console.log(example([1,2,3]));
console.log(example(12));
console.log(example(鈥楬ola despues del fail鈥));



const withoutEnd = () => {
  while (true) {
    console.log('nunca para de aprender');
  }
}

const fail = (message: string) => {
  throw new Error(message);
}

const example = (input: unknown) => {
  if (typeof input === 'string') {
    return 'es un string';
  } else if (Array.isArray(input)) {
    return 'es un array';
  }
  return fail('not match');
}


console.log(example('Hola'));
console.log(example([1,1,1,1]));
console.log(example(1212)); // detiene
console.log(example('Hola despues del fail'));
console.log(example('Hola despues del fail'));
console.log(example('Hola despues del fail'));

Never type sirve para detener de forma forzada la ejecuci贸n de alg煤n programa. Esto lo podemos definir mediante una funci贸n que retorna un throw error o simplemente definiendo el type never.

y ese doble 01 nunca se cambio鈥 jaja es broma gran curso hasta el momento!