Una de las características principales de TypeScript, y sin lugar a dudas el mayor aporte de TypeScript es el tipado. Es decir, indicar la naturaleza de cada variable. Si una variable contendrá un número, o una cadena de texto, o otros tipos de datos. Esto aporta robustez al código que estamos escribiendo. Una variable de un tipo concreto no puede ser utilizada para otro tipo. Así, en este capítulo, vamos a ver algunos de los tipos de datos que hay en TypeScript, y como utilizarlos, y en futuros capítulos, veremos como es posible inferir un tipo de dato e incluso como podemos convertir entre distintos tipos de datos. Vamos a por los tipos en TypeScript.
Exprime el tipado en TypeScript
En este capítulo vamos a ver una decena de tipos de datos en TypeScript, y como se definen. Así, como las características de cada uno de ellos.
Una de las ventajas de declarar el tipo de una variable, es que en la mayoría de editores, nos permite conocer los distintos métodos que podemos utilizar sobre esa variable.
Así, en este capítulo trataremos los siguientes tipos,
number
string
boolean
array
tuple
enum
union
any
void
never
number
Como te puedes imaginar este tipo se utiliza para declarar una variable que contenta números. Indicar que todos los números se guardan como números de coma flotante, es decir, números reales. Además, estos números pueden ser en base decimal, hexadecimal, octal o binarios, como en el ejemplo siguiente,
const numero_d: number = 10;
const numero_h: number = 0x12AF;
const numero_o: number = 0o123;
const numero_b: number = 0b101010;
console.log(numero_d);
console.log(numero_h);
console.log(numero_o);
console.log(numero_b);
Si ejecutas el código anterior, verás que el resultado es siempre decimal. Tal y como comentaba anteriormente, se guarda y se representa como un número real.
10
4783
83
42
Este tipo de datos tiene una serie de métodos asociados. Algunos de estos métodos son,
toString
que devuelve la representación como cadena de texto de la variable.toFixed
devuelve una cadena con el número de decimales que le digamos.
string
Este tipo de dato es el que te permitirá almacenar cadenas de texto. Puedes utilizar tanto comillas simples como comillas dobles para definir el valor. Mientras que si utilizas esas comillas inclinadas, puedes convertir una variable en su contenido.
const nombre: string = "Pepe";
const apellido: string = "Pótamo";
const completo: string = `${nombre} ${apellido}`;
console.log(completo);
Algunos métodos interesantes que puedes utilizar con este tipo de datos son,
charAt
devuelve el carácter en una posición dadaindexOf
devuelve la posición del texto que le indiques en otro texto ó-1
, si no lo encuentratoUpperCase
devuelve el texto convertido a mayúsculastoLowerCase
devuelve el texto convertido a minúsculasincludes
verifica si contiene una cadena de textoendsWith
comprueba si una cadena de texto termina con un valormatch
comprueba una expresión regulartrim
devuelve la cadena sin espacios al inicio y al final
Estos son algunos de los métodos del tipo string
. Hay bastantes mas, pero, con estos, ya te puedes hacer una idea del potencial de este tipo de datos.
console.log(nombre.toUpperCase());
boolean
Ahora toca uno sencillo. Un tipo de datos que simplemente toma dos posibles valores true
o false
.
array
Este tipo de datos tiene la particularidad que te permite almacenar varios valores de un tipo de definido, por ejemplo, te permite guardar varias números o cadenas de texto, u otros que veremos mas adelante. Eso si, todos los valores almacenados en un array tienen que ser del mismo tipo.
Así, por ejemplo para definir un array
de cadenas de texto lo puedes hacer de la siguiente forma,
const frutas: string[] = ["naranja", "pera", "plátano"];
Para obtener un elemento del array
, lo puedes hacer de la siguiente forma,
console.log(frutas[0])
Esto para obtener el primero. Si indicas un índice que está por encima del número de elementos que contiene tu array
, te devolverá undefined
.
Otra cuestión interesante, es que si bien, has definido frutas
como const
, lo cierto es que puedes modificar su contenido,
frutas[0] = "melón";
console.log(frutas);
Algunos métodos interesantes de los tipos de dato array
, son los siguientes,
pop
quita el último elemento delarray
y devuelve el elementoshift
quita el primer elemento delarray
y devuelve el elementopush
añade un elemento alarray
y devuelve la longitud delarray
sort
ordena el contenido delarray
. Es decir, modifica el orden delarray
.indexOf
devuelve la posición de un elemento delarray
o-1
en caso de que no lo contenga.join
une todos los elementos delarray
y devuelve una cadena de texto.concat
une dosarray
y devuelve el resultado
tuple
Este tipo de dato no existe en JavaScript. Una tuple
contiene dos valores de tipos diferentes, aunque podrían ser del mismo tipo. Por ejemplo,
const usuarios: [number, string] = [1, "Pepe"];
console.log(usuarios);
Si queremos añadir un nuevo usuario, a nuestra lista de usuario, utilizaremos el método push
, al igual que haces con los array
,
usuario.push(2, "Potamo");
console.log(usuario);
enum
Los datos tipo enum
son un conjunto de valores constantes. Por ejemplo, para definir dispositivos
, puedes hacerlo de la siguiente forma,
enum Dispositivo {
Pantalla,
Reloj,
Movil
}
Existen distintos tipos de enum
, como son los de tipo number
, los de tipo string
y los heterogéneos. Por defecto, un enum
es de tipo number
, y salvo que asignes un valor a cada elemento, este se asigna de forma secuencial. Así en el ejemplo anterior,
console.log(Dispositivo.Pantalla); // => 0
console.log(Dispositivo.Movil); // => 2
Si bien, no es necesario que tengan un valor secuencial, sino que pueden tener cualquier tipo de valor.
enum Dispositivo2 {
Pantalla = 2,
Reloj = 5,
Movil = 15,
}
console.log(Dispositivo2.Pantalla); // => 2
console.log(Dispositivo2.Movil); // => 15
Y de la misma manera, tal y como indiqué antes, también pueden ser cadenas de texto,
enum Dispositivo3 {
Pantalla = "PANTALLA",
Reloj = "RELOJ",
Movil = "MOVIL",
}
console.log(Dispositivo3.Pantalla); // => PANTALLA
console.log(Dispositivo3.Movil); // => MOVIL
Tienes que tener en cuenta la ventaja que te ofrecen los tipos de datos enum
numéricos frente al resto. Y es que este tipo de datos, te permiten realizar un mapeo inverso. Por ejemplo, en el caso de Dispositivo2
,
console.log(Dispositivo2.Pantalla) // => 2
console.log(Dispositivo2[2]) // => Pantalla
union
El tipo de dato union
te permite declarar una variable de dos o mas tipos. Por ejemplo, puedes declarar que una determinada variable es del tipo string
y a su vez del tipo number
. Un ejemplo,
let item: (string | number);
item = 10;
console.log(item); // => 10 (un number)
item = "20";
console.log(item); // => 20 (un string)
Atención, que en el ejemplo anterior, el primero es un number
, mientras que el segundo es un string
. Es decir, que el primero lo trataras como un number
y puedes utilizar los métodos de un number
, mientras que en el segundo utilizarás los métodos de un string
.
any
Pero, ¿que sucede si no sabes con certeza el tipo de datos que contendrá una variable? En ese caso puedes utilizar el tipo any
, que básicamente es un tipo de datos que te permite contenido dinámico.
let item: any;
item = 10;
console.log(item); // => 10 (un number)
item = "20";
console.log(item); // => 20 (un string)
Incluso, puedes declarar un array
de tipo any
, que como ya te imaginas, puede contener cualquier tipo de dato,
const valores: any[] = [1, "dos", 3, "cuatro"];
console.log(valores);
void
void
se utiliza para indicar que no devuelve nada. Desde luego, que no tiene ningún sentido asignar el tipo void
a una variable. Pero, si defines una variable del tipo void
solo le podrás asignar el valor undefined
o null
, en cualquier otro caso te arrojará un error.
En general el tipo void
se recomienda utilizarlo como un valor de retorno o como un argumento genérico.
never
El tipo never
indica que nunca ocurrirá. Este tipo de dato se puede utilizar como retorno de una función, cuando sabemos que esa función no llegará a terminar nunca, por ejemplo, cuando se lanza un error, o cuando entra en un bucle infinito.
function nada(ejemplo: string): never {
throw new Error(ejemplo);
}
El vídeo
Lo mismo que te he contado hasta aquí pero en formato vídeo,
Más información,