Búsqueda de sitios web

javascript - Error 'El objeto podría ser nulo' en Typescript al hacer una comparación


Tengo un ordenamiento simple:

dataCopy.sort((a: Data, b: Data) => {
  if (a[label] === null || b[label] === null) return 0;
  if (direction === "desc")
    return a[label] > b[label] ? 1 : -1;
  return 0;
});

El tipo de "Datos" es:

export type Data = {
  [key: string]: string | number | null;
};

Compruebo si a[label] y b[label] son ambos nulos y aún así obtengo el error "Object is possibly 'null'.ts(2531)". Parece que solo ocurre con los operadores > y <.

Respuesta #1

Probablemente simplemente no sea lo suficientemente inteligente como para darse cuenta de que revisaste. Por cierto, no publicaste de dónde venía label, pero suponiendo que ese no sea el problema, intenta esto:

dataCopy.sort((a: Data, b: Data) => {
  const aLabel = a[label];
  const bLabel = b[label];
  if (aLabel === null || bLabel === null) return 0;
  if (direction === "desc")
    return aLabel > bLabel ? 1 : -1;
  return 0;
});

A veces tienes que factorizar cosas para que TypeScript pueda ver que has comprobado condiciones como === null.