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.

¿Cuál es la diferencia entre estas dos cláusulas “extends”?

No entiendo por qué el tipo de nVal1 puede ser inferido en cada posición, mientras que nVal2 no puede.

Imagen

function rSelf1<t extends="" unknown[]="" |="" [unknown]="">(vs: T): T {
  return vs;
}

function rSelf2<t extends="" unknown[]="">(vs: T): T {
  return vs;
}

const nVal1 = rSelf1(["a", 1, 2, true]);
const nVal2 = rSelf2(["a", 1, 2, true]);

Enlace del código:
https://codesandbox.io/s/typescript-playground-export-forked-t1d8o?file=/index.ts

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En la primera función rSelf1, el tipo genérico T extiende tanto unknown[] como [unknown], lo que significa que puede ser tanto un arreglo con cualquier cantidad de elementos como un arreglo de un solo elemento con un tipo desconocido. Cuando pasamos un arreglo a esta función, se infiere el tipo del arreglo y se asigna a T, lo que permite que la función devuelva el mismo tipo de arreglo.

    En la segunda función rSelf2, el tipo genérico T extiende unknown[], lo que significa que solo puede ser un arreglo con cualquier cantidad de elementos. Cuando pasamos un arreglo a esta función, se infiere el tipo del arreglo y se asigna a T, pero el tipo específico de cada elemento en el arreglo es desconocido, lo que significa que la función no puede garantizar que devolverá el mismo tipo de arreglo.

    En el fragmento de código proporcionado, nVal1 se puede inferir porque rSelf1 tiene una restricción de tipo más amplia que rSelf2, lo que le permite aceptar una gama más amplia de tipos de entrada. Por otro lado, nVal2 no se puede inferir porque la restricción de tipo en rSelf2 es más específica, lo que significa que solo puede aceptar arreglos con una estructura específica (unknown[]).

Comments are closed.