Héctor BlisS

@blissito

hace 2 años

Hay una cualidad de Typescript que lo diferencia de cualquier otro lenguaje fuertemente tipado como Java o C# y es su sistema de inferencia (Type Inference o Infer simplemente en inglés).

Esto convierte a Typescript en un lenguaje fácil de usar, ya que no tenemos que convertir a JS en un lenguaje fuertemente tipado donde DECLARAR LOS TIPOS DE TODO se vuelve super tedioso

infer

Typescript usa la información disponible que resulta obvia para el propio sistema, es decir si declaramos una variable y le asignamos como primer valor un número, Typescript supone entonces que el tipo de esta variable a través de todo el programa será siempre de tipo number dándonos con esto un error de asignabilidad ("Assignability error" en ingles)

assignability error

Haciendo con esto mucho más fácil trabajar con Typescript ya que no tenemos que declarar los tipos de algo que es obvio para Typescript y para los humanos también, incluso a Typescript no sólo le parece obvio, también el declarar un tipo que se puede inferir le parece incorrecto (esto en ciertas configuraciones con VSCode, que exploraré en futuras entradas 📰)

Suscríbete a mi lista de correo para que no te pierdas las actualizaciones de mi Blog, cursos gratis, videos nuevos en Youtube y más 📺

Pero hay más sobre inferencia en Typescript

Lo anterior es el ejemplo más simple, pero Typescript es muy potente e inteligente e incluso puede inferir el tipo de una variable con declaraciones aún más complejas.

complex infer

El algoritmo que usa Typescript en este caso para seleccionar el tipo correcto es algo llamado "El mejor común tipo" (The best common type) el cual considera cada uno de los tipos de los candidatos y selecciona los tipos compatibles.

De tal forma que es capaz de inferir incluso si son instancias de objetos:

inferring type from instance

Bonus:

Sintaxis de la anotación del tipo (Type annotations)

Estoy intentando ser breve en mis entradas, para dejarte lo que yo llamo pequeños "bytes" de información y no robar mucho de ti valioso tiempo y aún así puedas aprender algo nuevo hoy.

Pero no me quiero ir de esta entrada sin explicarte algo que estoy obviando un poco y es la sintaxis para definir un "primitive type"

En Typescript vamos a usar los : dos puntitos ("colon" en inglés) para definir el tipo de la variable:

1let name:string; 2 3name = 'blissmo'; 4

En este ejemplo tiene sentido definir el tipo de la variable ya que de lo contrario sería undefined y Typescript supondría que es del tipo any, con esto estamos diciéndole a Typescript que esta variable a pesar de iniciar vacía, sólo contendrá valores de tipo string.

A pesar de que Typescript infiere el valor de name de la primer asignación (name='blissmo') Typescript permitiría la mutación de esta variable a otro tipo diferente de string por el hecho de que su tipo inicial fue any a esto se le llama Evolucionando any("evolving any" en inglés) y debemos evitarlo, pues cancela el propósito de la definición de los tipos.

Prometo platicarte más sobre esto específicamente, en la siguiente entrada 😬 Promise<NuevaEntrada>

Por ahora ¡mírate! estás en buen camino para convertirte a ti mismo en programador Typescript y entenderlo por completo 🤓

Te mando un abrazo. Bliss.

Suscríbete a mi lista VIP

Y no te pierdas las actualizaciones

No te enviaré spam. Desuscríbete en cualquier momento.