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) ...
