angular - Ominaisuutta ei ole tyypissä


Kohtaan oudon ongelman. Joten funktio authenticateUser palauttaa taulukon, joka näyttää tältä

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

Mutta kun yritän tarkistaa, onko success == false, saan virheen, että tällainen ominaisuus ei ole olemassa tyyppiin 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']);
  }

Olen yrittänyt käyttää esimerkkejä muista tutoriaaleista, mutta en silti löydä ratkaisua

Vastaus #1

Sinulla on 2 tapaa tehdä tämä:

Vaihtoehto 1 käytä tyyppiä 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']);
  }
}

Tai tekemällä se vahvasti tyypitettynä {success: boolean, msg: string} tai luomalla tämän tyypin rajapinta:

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']);
  }
}

Vastaus #2

En ole kovin perehtynyt Angulariin, mutta se johtuu siitä, että data ei ole tyypitetty oikein, tämän voi korjata tekemällä tyyppimuunnoksen tai käyttämällä tyyppisuojauksen.

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

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