Tipos: arrays y tuplas

Los arrays son un tipo de valor compuesto que tiene JavaScript para asignar a una variable una colección de valores. Con TypeScript podemos tipar variables de tipo array, o vector, para que puedan tener asignados múltiples valores. Con las tuplas, además, podemos dotarle de cierta estructura a cada uno de los elementos de ese array.

Cuando trabajamos con TypeScript, es fundamental entender cómo manejar tipos no primitivos para representar datos más complejos y estructurados. En particular, los arrays y las tuplas nos permiten asociar múltiples valores a una sola variable, algo que va más allá de los tipos primitivos como number o string que solo almacenan un único dato.

Los arrays, o vectores, son estructuras que nos resultarán familiares si venimos de JavaScript. Se representan con corchetes y contienen múltiples valores separados por comas. Por ejemplo, un array numérico podría ser [1, 2, 3, 4, 5], donde cada número ocupa una posición específica, empezando a contar desde cero. De manera similar, podemos tener un array de strings para representar los días de la semana: ["lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"]. Cada elemento se accede mediante su índice, por ejemplo, el primer elemento es el índice 0, el segundo el índice 1, y así sucesivamente.

En TypeScript, cuando declaramos un array, podemos y debemos especificar el tipo de los elementos que contendrá. Esto se hace indicando el tipo seguido de corchetes, como string[] para un array de strings. Esto limita el array a contener solo elementos de ese tipo, evitando errores como intentar insertar un número en un array de strings. Si no especificamos el tipo, TypeScript intentará inferirlo basándose en los elementos que le asignamos, y en casos donde hay varios tipos, creará un tipo unión, por ejemplo, string | number | boolean. También podemos usar any[] para permitir cualquier tipo, aunque esto pierde la ventaja del tipado estricto.

Acceder a los elementos del array se hace con corchetes y el índice deseado, por ejemplo, dias[0] para obtener el primer día.

Por otro lado, las tuplas son una especialización de los arrays que solo existen en TypeScript, no en JavaScript puro. Son arrays con una longitud fija y tipos específicos para cada posición. Esto es útil cuando queremos representar estructuras donde sabemos exactamente qué tipo de dato va en cada posición y cuántos elementos hay. Por ejemplo, si queremos representar un registro con nombre, edad, país y un booleano que indique si es usuario premium, podemos definir una tupla así:

let usuario: [string, number, string, boolean];
usuario = ["Danny", 26, "España", true];

Aquí, usuario debe tener exactamente cuatro elementos, en ese orden y con esos tipos. No podemos agregar más elementos ni cambiar el tipo de alguno sin que TypeScript nos marque un error.

Una mejora introducida en TypeScript 4.0 es la posibilidad de darle nombres a los elementos dentro de la tupla para mejorar la legibilidad y comprensión del código. Esto no cambia cómo se accede a los elementos (seguimos usando índices), pero sí ayuda a quien lea el código a entender qué representa cada posición. Por ejemplo:

let usuario: [nombre: string, edad: number, país: string, premium: boolean];
usuario = ["Danny", 26, "España", true];

Con esta sintaxis, queda claro que el primer elemento es el nombre, el segundo la edad, y así sucesivamente. Aunque internamente seguimos accediendo con índices, estos nombres funcionan como etiquetas descriptivas para el tipo.

En resumen, los arrays nos permiten manejar colecciones homogéneas de datos, mientras que las tuplas nos ofrecen una estructura fija y heterogénea, con tipos específicos para cada posición. Además, con la capacidad de nombrar los elementos de las tuplas, podemos hacer que nuestro código sea más claro y mantenible. Estas herramientas son esenciales para modelar datos complejos y garantizar la seguridad de tipos en nuestras aplicaciones TypeScript.

Lista de reproducción
  1. 1
    Temporada 1
    5 minutos
  2. 2
    ¿Qué es TypeScript?
    11 minutos
  3. 3
    Instalando TypeScript
    8 minutos
  4. 4
    Compilando un Hola Mundo sencillo
    7 minutos
  5. 5
    Hola Mundo pero con tipos
    10 minutos
  6. 6
    Tipos: tipos primitivos
    12 minutos
  7. 7
    Tipos: tipos especiales (any, null, ...)
    10 minutos
  8. 8
    Tipos: arrays y tuplas
    11 minutos
  9. 9
    Tipos: objetos
    7 minutos
  10. 10
    Funciones: lo básico
    9 minutos
  11. 11
    Funciones: tipando funciones
    9 minutos
  12. 12
    Clases: introducción a las clases
    9 minutos
  13. 13
    Clases: creando una clase
    10 minutos
  14. 14
    Clases: modificador private
    8 minutos
  15. 15
    Clases: modificador readonly
    3 minutos
  16. 16
    Clases: Atributos virtuales con getters y setters
    10 minutos
  17. 17
    Clases: herencia
    9 minutos
  18. 18
    Clases: modificadores abstract y protected
    8 minutos
  19. 19
    Tipos alias
    6 minutos
  20. 20
    Tipos literales
    5 minutos
  21. 21
    Uniones de tipos
    7 minutos
  22. 22
    Uniones discriminantes
    7 minutos
  23. 23
    Intersecciones de tipos
    5 minutos
  24. 24
    Interfaces: introducción
    7 minutos
  25. 25
    Interfaces: modificadores y funciones
    9 minutos
  26. 26
    Interfaces: usándolas con clases
    8 minutos
  27. 27
    Interfaces: herencia de interfaces
    8 minutos
  28. 28
    Interfaces: interfaces indizadas
    5 minutos
  29. 29
    Interfaces: funciones y tipos híbridos
    5 minutos
  30. 30
    ¿Qué diferencia hay entre interfaces y tipos? (2020)
    8 minutos
  31. 31
    Casteos con as
    6 minutos
  32. 32
    instanceof y las guardas
    9 minutos
  33. 33
    Tipos enumerados
    8 minutos
  34. 34
    Valores avanzados para enumerados
    7 minutos
  35. 35
    Enumerados con valores computados
    6 minutos
  36. 36
    Genéricos en tipos
    8 minutos
  37. 37
    Múltiples genéricos y buenas prácticas
    5 minutos
  38. 38
    Genéricos en funciones
    8 minutos
  39. 39
    Genéricos con restricciones
    6 minutos
  40. 40
    Tipos de utilidad
    3 minutos
  41. 41
    Exportando módulos
    9 minutos
  42. 42
    Importando módulos
    7 minutos
  43. 43
    Export default e import asterisco
    6 minutos
  44. 44
    tsconfig
    7 minutos
  45. 45
    Módulos desde NPM
    7 minutos
  46. 46
    Arroba types y los .d.ts
    8 minutos
  47. 47
    Ejemplo (1): creando una API REST simple en TypeScript
    11 minutos
  48. 48
    Ejemplo (2): montando un servidor Express
    8 minutos
  49. 49
    Ejemplo (3): haciendo las funciones de control de datos
    11 minutos
  50. 50
    Ejemplo (4): conectando todas las piezas
    7 minutos