Búsqueda de sitios web

typescript - El tipo 'undefined' no se puede asignar al tipo '(number | null)[]'


Tengo a TS quejándose de este código:

const data = values?.map((item: PointDTO) => item.y);

const chartData: ChartData = {
  labels,
  datasets: [{ data }],
};

El mensaje de error es:

Type '(number | undefined)[] | undefined' is not assignable to type '(number | ScatterDataPoint | BubbleDataPoint | null)[]'.
  Type 'undefined' is not assignable to type '(number | null)[]'

Así que cambié mi código a:

const data = values?.map((item: PointDTO) => item.y) ?? null;

Pero esto no resolvió mi problema.

¿Cómo puedo resolver esto, por favor?

Respuesta #1

Suponiendo que la siguiente línea sea la que está mostrando el error: datasets: [{ data }], necesitarás cambiar la primera línea de tu ejemplo a la siguiente:

const data = values?.map((item: PointDTO) => item.y).filter((y) => y !== undefined) ?? [];

Explicación de los cambios:

  • Si la variable values se estableció en null, data originalmente se habría asignado con undefined por el operador opcional. Esto se soluciona agregando ?? [] al final, lo que hará que el resultado por defecto sea un arreglo vacío en su lugar.
  • Si alguna de las propiedades item.y era undefined, data originalmente se habría asignado con un arreglo que contiene valores undefined como sigue [undefined, undefined, 1234, undefined]. Esto se corrige con .filter((y) => y !== undefined), que elimina cualquiera de las entradas undefined del arreglo y cambiaría el resultado anterior a esto [1234].

Respuesta #2

Podrías tener que especificar que la variable es indefinible:

    let dataPoint: DataPoint | undefined;