Lo primero que tienes que saber es que Typescript es capaz de inferir el tipo de las variables, aunque no lo indiques explícitamente. Esto es una diferencia por ejemplo a Java, que sí que es necesario expresar el tipo de variables y funciones.
Esto pasa si la variable que declaras tiene un valor por defecto, por ejemplo:
let username = "dlopez";
Si ahora por ejemplo intentas hacer username.push("")
Typescript al compilar te va a decir que no puede hacer push
sobre un string. También hay que decir que muchos editores de código e IDEs también son capaces de avisarte de esas cosas, pero nunca está de más que también te ayude Typescript por si te dejas algo.
Esto esta muy guay porque simplemente usando Typescript y sin hacer nada ya tienes ciertas comprobaciones de base, y todo sin tener que ejecutar el código.
Otra cosa importante es que cuando estableces un tipo a una variable o función ya no se puede cambiar. Si por lo que sea necesitas esto lo que sí se puede hacer es crear un tipo personalizado que sea más general y permita varios tipos de valores.
Creando nuestros primeros tipos básicos en Typescript
Declarar el explícitamente el de variable en Typescript es muy sencillo, tan solo tienes que usar la notación de los dos puntos y poner el tipo que quieres, ejemplo:
let username: string = "codingpotions";
Los tipos básicos que tienes disponibles son los siguientes:
- string: Cadenas de texto
- boolean: Valores
true
yfalse
- number: Todo tipo de números, con decimales y sin decimales (en Typescript no existe el tipo float)
- any: Literalmente esto significa que puede tener cualquier tipo
Obviamente existen mucho más tipos, también tienes el Tipado de Objetos en Typescript, Arrays y Tuplas en Typescript y algunos más que veremos más adelante.
Si quieres probar el tipado de forma sencilla puedes echar un ojo al Playground oficial de Typescript, ya que además de ver errores que saca Typescript, vas a poder ver el código final compilado en el propio editor, a la derecha.
También se puede declarar el tipo sin establecer valor inicial, esto es útil si sabemos qué tipo de valor va a tener la variable pero todavía no podemos saber su valor por defecto:
let isUserAdmin: boolean;
Incluso puedes indicar que algo puede ser de varios tipos:
let textSlot: boolean | string | number;
OJO. Cuidado al confundir el tipo string
y el tipo en mayúsculas String
. Normalmente el que quieres usar es el de string
ya que es el valor primitivo. El tipo en mayúsculas String
se refiere a las clases String de Javascript, que no se se suele usar mucho.
Por ejemplo el tipo para las fechas si que se pone en mayúsculas, porque se refiere a la clase Date
:
let endDate: Date;
Literal types
Cuando declaras una variable usando const
, y no añades tipo, Typescript lo que hace es usar el valor inicial como tipo, a esto se le conoce como literal type. Typescript hace esto porque sabe que una variable declarada const
no puede cambiar. Vamos, que los literal type sirven para definir que algo literalmente va a tener cierto valor.
Utilizando literal types puedes declarar una variable con una lista de posibles valores, ejemplo:
let type: "warning" | "success" | "error" = "warning";
Si más adelante en el código intentas modificar la variable e intentas poner un valor que no sea los declarados, Typescript soltará error.
Normalmente poner los valores así no se suele hacer, es mejor usar Type alias en Typescript o Enumeradores en Typescript 🚧.
Algunas consideraciones
Hay quien piensa que es mejor que Typescript infiera los tipos y solo especificar el tipado de las variables cuando sea necesario. También hay gente que prefiere tipar todo explícitamente, aunque Typescript infiera el mismo tipo, cuestión de gustos.
Yo recomiendo dejar que Typescript infiera los tipos al declarar variables con valor inicial, ya que no aporta nada, las comprobaciones de tipado serán las mismas y los desarrolladores que mantengan el código también tendrán claro el tipo porque ven el valor inicial.
Al declarar una variable con let
pero sin establecer su valor inicial, Typescript infiere el famoso tipo any
, que literalmente indica que puede ser cualquier valor.
El tipo any
muchas veces (por desgracia) lo tenemos que usar cuando Typescript se queja por un tipo y no sabemos cuál es el correcto. Hay que tener cuidado con esta práctica porque Typescript nos puede estar avisando de un bug en el código y al usar any
lo estamos ignorando.
Al usar any
lo que estamos haciendo es que ese valor no tiene tipo estricto, y por tanto lo puedes usar en funciones bien tipadas, pudiendo romper el código. Recomiendo usar el any
lo mínimo posible y siempre que no quede más remedio.