angular - Svojstvo ne postoji na tipu


Suočavam se sa čudnim problemom. Pa moja funkcija authenticateUser vraća niz poput ovog

{
  success: false,
  msg: "invalid password"
}

Ali kada pokušavam provjeriti je li success == false, dobijem pogrešku da takvo svojstvo ne postoji na tipu Objects

 this.authService.authenticateUser(user).subscribe(data=>{
  if(data.success){//here need to check response for success
    console.log(data)
    this.authService.storeUserData(data);
    this.router.navigate(['/user']);
  }else{
    this.router.navigate(['/login']);
  }

Pokušao sam koristiti primjere iz drugih vodiča, ali još uvijek nema rješenja

Odgovor #1

Imaš 2 načina da to učiniš:

Opcija 1 koristi tip any:

this.authService.authenticateUser(user).subscribe((data: any)=>{
  if(data.success){//here need to check response for success
    console.log(data)
    this.authService.storeUserData(data);
    this.router.navigate(['/user']);
  }else{
    this.router.navigate(['/login']);
  }
}

Ili to raditi s jakim tipiziranjem {success: boolean, msg: string} ili stvoriti sučelje ovog tipa:

this.authService.authenticateUser(user).subscribe((data: {success: boolean, msg: string}) =>{
  if(data.success){//here need to check response for success
    console.log(data)
    this.authService.storeUserData(data);
    this.router.navigate(['/user']);
  }else{
    this.router.navigate(['/login']);
  }
}

Odgovor #2

Nisam previše upoznat s Angularom, ali to je zato što podaci nisu pravilno tipizirani, možete to popraviti korištenjem kastanja ili zaštite tipa.

const hasSuccess = (something: any): something is {success: boolean} {
     return "success" in something;
}

if(hasSuccess(data) && data.success) ...