ProgramaciónDesarrollador Frontend / Desarrollador TypeScript

¿Cómo se implementa y para qué se utiliza la tipificación estricta de arreglos y tuplas en TypeScript? ¿Cuáles son sus diferencias y posibles inconvenientes en su uso?

Supere entrevistas con el asistente de IA Hintsage

Respuesta

En TypeScript, los arreglos se pueden tipificar estrictamente especificando el tipo de los elementos a través de la notación type[] o Array<type>. Por ejemplo:

let arr: number[] = [1, 2, 3];

Las tuplas son arreglos con una longitud fija y tipos para cada elemento:

let tuple: [string, number] = ["age", 30];
  • Arreglo: permite cualquier cantidad de elementos del mismo tipo.
  • Tupla: fija estrictamente la cantidad y el orden de los tipos. Permite crear estructuras similares a registros o devolver valores de diferentes tipos desde una función.

Inconvenientes:

  • Al usar métodos de arreglos (push, pop) en tuplas, push no está prohibido, pero el resultado ya supera los límites de la tipificación garantizada.
  • La expansión descuidada de la tupla conduce a código "inseguro".
  • La desestructuración de tuplas en funciones: un tipo o longitud errónea causará un error.

Pregunta capciosa

¿Pueden las tuplas en TypeScript contener un número variable de elementos, y cómo afectará esto a la tipificación?

Respuesta: Sí, las tuplas pueden contener elementos restados utilizando la sintaxis ..., pero todavía requieren una tipificación estricta para los elementos restantes:

let tuple: [string, ...number[]] = ["id", 10, 20, 30];

Sin embargo, los elementos antes de ... deben ser especificados, y el tipo para el resto del arreglo debe ser único.

Ejemplos de errores reales debido a la falta de conocimiento de las sutilezas del tema


Historia

En un proyecto de comercio electrónico, un desarrollador intentó guardar más de dos elementos en una tupla [string, number] utilizando push. Esto no dio un error en la etapa de compilación, pero rompió la función que esperaba exactamente dos elementos, lo que condujo a errores en el procesamiento de pedidos.


Historia

Una función devolvía una tupla [string, number], sin embargo, el consumidor esperaba un arreglo de cadenas. La discrepancia de tipos produjo un error difícil de identificar, lo que causó que se enviaran valores incorrectos a producción.


Historia

Al migrar código de JavaScript a TypeScript, se utilizaron arreglos en lugar de tuplas para devolver múltiples valores de diferentes tipos. Esto rompió la tipificación estricta y resultó en la aparición de errores en el código posterior, que confiaba en el orden y tipo de los valores.