Trabajo en la aplicación web Angular2. Creé una clase simple en mecanografiado:
export class User { firstName: string; lastName: string; nominative() : string { return this.lastName + " " + this.firstName; } } Cuando llamo a nominative en un objeto de tipo User , recibo este error: Error in :0:0 caused by: user.nominative is not a function .
Llamo a la función en mi clase AppComponent :
export class AppComponent implements OnInit { name: string = ""; ngOnInit() : void { let user = JSON.parse(sessionStorage.getItem("User")) as User; if (user) { this.name = user.nominative(); } } }Ya intenté usar la expresión lambda de esta manera:
nominative = () : string => { ... }Pero nada cambia. El problema es solo en esta clase, entonces, ¿qué estoy haciendo mal?
as User solo le dice al compilador que es seguro asumir que el valor es de tipo User , pero no tiene ningún efecto en el tiempo de ejecución y no tendrá ningún método porque los métodos no se pasan con JSON.
necesitarías
let user = new User(JSON.parse(sessionStorage.getItem("User"))); para obtener una instancia User real. Debería crear un constructor que asigne los valores de JSON a campos como
class User { ... constructor(json:any) { this.firstName = json.firstName; this.lastName = json.lastName; }