Los tipos en TypeScript son la herramienta básica para definir las características y el comportamiento de las variables y objetos en el código.
Los tipos nos permiten especificar qué tipo de valores puede contener una variable, qué tipo de argumentos puede recibir una función, y qué tipo de valor devolverá una función (entre otros).
El sistema de tipos en TypeScript es un poco “especial” frente a otros lenguajes. Algunas de las características que lo hacen especial son:
- Estática: La tipificación se verifica en tiempo de compilación, lo que permite detectar errores antes de ejecutar el código.
- Opcional: Aunque TypeScript es un lenguaje fuertemente tipado, la tipificación es opcional y puede ser progresivamente añadida a un proyecto.
- Estructural: TypeScript utiliza una tipificación estructural, donde dos tipos son compatibles si tienen la misma forma o estructura
Categorías de tipos en TypeScript
Los tipos en TypeScript se puede dividir en varias categorías principales:
Tipos Estáticos: Son los tipos que se verifican en tiempo de compilación. Incluyen:
- Tipos Primitivos: Los tipos básicos que se encuentran en casi todos los lenguajes de programación.
- Tipos Definidos por el Usuario (User Defined Types): Tipos que el usuario define para satisfacer necesidades específicas de la aplicación.
Tipos Genéricos: Permiten la definición de componentes que pueden trabajar con diferentes tipos sin especificar de antemano el tipo exacto. Los genéricos proporcionan una manera de crear funciones y clases reutilizables.
Decoradores: Son una forma especial de declaración que se puede aplicar a clases, métodos, propiedades y parámetros. Los decoradores permiten añadir metadatos y modificar el comportamiento de las clases y sus miembros.
Tipos Estáticos
Tipos primitivos
Los tipos primitivos en TypeScript habituales:
Tipo | Descripción |
---|---|
number | Representa tanto números enteros como de punto flotante |
bigint | Representa números enteros grandes |
string | Representa cadenas de texto |
boolean | Representa valores lógicos: true o false |
symbol | Representa un valor único y mutable |
Aquí otros tipos primitivos que tienen un uso especial
Tipo | Descripción |
---|---|
any | Representa un tipo compatible con todos los demás |
void | Representa la ausencia de un valor de retorno |
undefined | Representa una variable que ha sido declarada pero no inicializada |
null | Representa la ausencia de un valor |
never | Representa el tipo de valor que nunca ocurre |
Tipos definidos por el usuario
Los tipos definidos por el usuario incluyen:
Tipo | Descripción |
---|---|
literal | Representa un elemento que admite una serie de valores concretos |
enum | Representa un conjunto de constantes con nombre |
class | Representa una plantilla para crear objetos con propiedades y métodos definidos |
array | Representa una lista de valores |
tuple | Representa una colección con un número fijo de elementos |
function | Representa una referencia función |
Las composiciones de tipos
Tipo | Descripción |
---|---|
union | Representa un valor que puede ser uno de varios tipos especificados |
intersection | Representa un valor que debe cumplir con todos los tipos especificados |
Tipos Genéricos
Los tipos genéricos permiten escribir funciones y clases que pueden trabajar con cualquier tipo de datos. Por ejemplo:
function identidad<T>(arg: T): T {
return arg;
}
En este ejemplo, T
es un tipo genérico que se determina en tiempo de ejecución.
Decoradores
Los decoradores se utilizan para añadir metadatos a las clases y sus miembros. Por ejemplo, un decorador de clase:
function logClase(target: Function) {
console.log(`Clase: ${target.name}`);
}
@logClase
class MiClase {
// Implementación de la clase
}
Jerarquía de tipos en TypeScript
La jerarquía de tipos en TypeScript se organiza de manera que cada tipo se deriva o es compatible con otros tipos en el sistema.
Os pongo un esquemita con la descripción simplificada de esta jerarquía:
No hace falta que os aprendáis esto de memoria. Pero tenerlo más o menos en la cabeza os puede ayudar a entender algún aspecto, sobre todo en materia a conversión de tipos y unidades compatibles.