2017-02-08 1 views
0

Как вы устанавливаете каждое свойство объекта с установщиком в TypeScript?Как правильно установить свойства объекта в TypeScript с сеттерами и геттерами?

export class AuthService { 
    private _user:User; // User is my model 

    constructor(...){} 

    public get user() 
    { 
     return this._user; 
    } 

    public set user(value){ 
     this._user = value; 
    } 
... 

Тогда установка в любом месте дает ошибки при:

this.authService.user.id = data.userId; 
this.authService.user.isLoggedIn = 'true'; 

MORE:

Модель пользователя:

export class User { 
    constructor(
     public email: string, 
     public pass: string, 
     public id?: string, 
     public fname?: string, 
     public lname?: string, 
     public isLoggedIn?: string){} 
} 

Ошибка: Cannot set property 'id' of undefined

+0

так ... какая ошибка? также, какая модель пользователя? – alebianco

+0

@alebianco Обновлено: я не просто хочу решить мою специфическую проблему с кодом, а скорее изучить правильный способ установки реквизита объекта с помощью сеттера. – BenRacicot

+0

Из приведенного выше кода не очевидно, что 'this._user' правильно определен, читая ошибку, вы можете быть уверены, что это не так. Опуская самую важную часть, 'constructor (...) {}', на самом деле не помогает. – estus

ответ

1

Yo и нужно пройти весь user объект в инкубаторе, но вам потребуется доступ ко всем остальным атрибутам пользователя

this.authService.user = { 
    id: data.userId, 
    isLoggedIn: true 
}; 

Альтернативно, имеют индивидуальные сеттеры для каждого свойства

public set id(value){ 
    this._user.id = value; 
} 

public set isLoggedIn(value){ 
    this._user.isLoggedIn = value; 
} 

Что вы назвали бы как, таким образом,

this.authService.id = data.userId; 
this.authService.isLoggedIn = 'true'; 
+0

Удивительно, поэтому другие реквизиты в объекте, такие как 'fname', должны быть установлены в значение или null? – BenRacicot

+0

@BenRacicot не обязательно, но сначала вам нужно убедиться, что вы правильно создаете модель пользователя, тогда все зависит от того, как вы хотите, чтобы ваше приложение выполняло –

1

Сообщение об ошибке кажется ясным, вы пытаетесь установить атрибуты для объекта, который не существует.

если this.authService.user === null вы не можете настроить его свойства.

Вы должны сначала создать new User(...) и назначить его this.authService.user, после чего вы можете пойти и изменить его свойства по мере необходимости.

Смежные вопросы