typescript - Cómo resolver el error TS2532: El objeto podría ser 'undefined'
Tengo código donde debería comprobar una condición complicada varias veces. Por ejemplo: (a && b) || c, etc. Intenté agregar una variable con mi condición como const hasSomething=(a && b) || c, y me enfrenté con un problema con TS que no puedo resolver.
Ejemplos de trabajos:
function add(a?: number, b?: number): number {
if (a && b) {
return a + b;
}
return 0;
}
No funciona:
function add(a?: number, b?: number): number {
const hasNumbers = a && b;
if (hasNumbers) {
return a + b;
^ ^
TS2532: Object is possibly 'undefined'.
}
return 0;
}
¿Hay alguna solución para arreglarlo sin la afirmación de no nulo !?
Respuesta #1
Fácil de arreglar :D. Solo actualiza la versión de TypeScript a 4.4:
function add(a?: number, b?: number): number {
const hasNumbers = a && b;
if (hasNumbers) {
return a + b;
}
return 0;
}
Parque infantil
Respuesta #2
el operador && (y) con números no funciona como se espera:
si lo usas así:
const foo = 3 && 4
puedes ver que el typeof foo es "número".
De hecho, el operador && devuelve:
el último número si el resultado será verdadero, ejemplo:
5 && 4estruepor lo que devolverá4el valor falso es cuando hay uno: por ejemplo
0 && 4tiene0como valor falso y devolverá0, lo mismo conundefined && 4esto devolveráundefined
Las versiones de TypeScript inferiores a 4.4.0 no entenderán realmente cuál será el resultado real debido a que podría ser undefined hasta donde yo sé.
dicho esto, también es una mala práctica usar number && number cuando al menos uno de los dos valores puede ser 0 debido al hecho de que 0 es un valor falso y en tu función cualquier suma con 0 resultará en una respuesta 0 según la comprobación a && b.
Te sugiero simplemente hacer que los parámetros de la función sean obligatorios para evitar el error y evitar la verificación hasNumbers:
function add(a: number, b: number): number {
return a + b
}
