¡Buenas noches! Soy novato en javascript y mecanografiado.
no puedo entender algo Escribí cuidadosamente mi código y apareció la situación. No puedo imaginar, por qué, a través de ella es algo básico. Mirar:
class A { id: number; constructor(id:number){ this.id=4; } isIdZero?():boolean{ if(this.id===0) return true; else return false; } } let a : A= new A(0); let b : A={ id:9 } alert(b.isIdZero());Este código genera un error "No se puede invocar un objeto que posiblemente sea 'indefinido'. ts(2722)"
¿Por qué? La función es igual a lo que escribió {}, ¿no es así?
¿Cómo puedo corregirlo?
Mi pregunta es probablemente tan primitiva que no encontré nada.
isIdZero?():boolean{ El signo de interrogación aquí significa que está definiendo isIdZero , por lo que puede no estar undefined , en lugar de ser una función. Dado que puede no estar definido, TypeScript no le permitirá llamarlo a menos que lo verifique primero. P.ej:
if (b.isIdZero) { alert(b.isIdZero()); } Si desea que isIdZero sea una propiedad obligatoria, elimine el signo de interrogación. Sin embargo, este cambio hará que el siguiente código comience a mostrar un error de tipo, ya que el objeto no tiene todas las propiedades que necesita para ser una A:
let b: A = { id:9 }Puede agregar la función al objeto que está creando
let b: A = { id: 9, isIdZero: () => false, }O puede dejar de intentar llamar a esto una A, y simplemente dejar que sea un objeto con una identificación que es un número:
let b = { id: 9, }la ? operador que está utilizando después de isIdZero? le dice a TypeScript que espera la posibilidad de que esta propiedad no esté definida.
No parece que sea necesario, por lo que puede eliminarlo.