es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo desestructurar un arreglo con elementos de diferentes tipos en TypeScript

El siguiente ejemplo de código funciona bien en JavaScript:

 const f = () => { return[true,"text",11]; }
 const [active,status,numberEleven] = f();
 const twelve = numberEleven + 1;

Sin embargo, const twelve = numberEleven + 1; arroja un error en Typescript porque numberEleven podría ser una cadena, un booleano o un número:

He intentado cambiar los tipos de retorno de la función:

const f = () => {
  const res: [boolean, string, number] = [true, warning, score];
  return res;
}

Pero no funcionó. Luego intenté cambiar el tipo del array desestructurado de la siguiente manera:

 const [active,status,numberEleven]: [boolean, string, number] = f();

Pero este enfoque resultó en el siguiente error:

Type '(string | number | boolean)[]' is not assignable to type '[boolean, string, number]'.
  Target requires 3 element(s) but source may have fewer.

Entonces, ¿cuál es la mejor manera de desestructurar un array con elementos de diferentes tipos en Typescript?
Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una solución para desestructurar un arreglo con elementos de diferentes tipos en TypeScript es usar el tipo Unión. Podemos crear un tipo que represente todos los posibles tipos que el elemento podría tener y usarlo en la asignación de desestructuración. Por ejemplo:

    type MyArray = [boolean, string, number];
    
    const f = (): MyArray => {
      const res: MyArray = [true, 'warning', 42];
      return res;
    };
    
    const [activo, estado, numeroOnce]: MyArray = f();
    const doce = numeroOnce + 1; // compila sin errores
    

    En este ejemplo, creamos un tipo personalizado MyArray que representa un array con el orden específico de elementos que esperamos recibir de la función f. Luego, usamos este tipo como el tipo del array desestructurado.

    Tenga en cuenta que si f devolviera un arreglo con elementos en un orden diferente o con una cantidad diferente de elementos, el código no compilaba. Este enfoque funciona cuando tenemos control sobre la estructura del arreglo, pero puede que no sea adecuado en otros escenarios.

Comments are closed.