typescript-tipos-de-datos

Entendiendo los tipos en TypeScript

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:

typescript-objetos-primitivos

  1. 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.
  2. 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.

  3. 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:

TipoDescripción
numberRepresenta tanto números enteros como de punto flotante
bigintRepresenta números enteros grandes
stringRepresenta cadenas de texto
booleanRepresenta valores lógicos: true o false
symbolRepresenta un valor único y mutable

Aquí otros tipos primitivos que tienen un uso especial

TipoDescripción
anyRepresenta un tipo compatible con todos los demás
voidRepresenta la ausencia de un valor de retorno
undefinedRepresenta una variable que ha sido declarada pero no inicializada
nullRepresenta la ausencia de un valor
neverRepresenta el tipo de valor que nunca ocurre

Tipos definidos por el usuario

Los tipos definidos por el usuario incluyen:

TipoDescripción
literalRepresenta un elemento que admite una serie de valores concretos
enumRepresenta un conjunto de constantes con nombre
classRepresenta una plantilla para crear objetos con propiedades y métodos definidos
arrayRepresenta una lista de valores
tupleRepresenta una colección con un número fijo de elementos
functionRepresenta una referencia función

Las composiciones de tipos

TipoDescripción
unionRepresenta un valor que puede ser uno de varios tipos especificados
intersectionRepresenta 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:

typescript-tipos

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.