Страницы

Поиск по вопросам

пятница, 1 марта 2019 г.

Как использовать новые геттер и сеттер?

Помогите пожалуйста отрефакторить код. Я написал компонент, который представляет из себя форму для отправки вопросов. Так же он выводит заданные на настоящий момент вопросы (пока в консоль, но это не принципиально). Вместо базы данных для учебных целей использую localstorage.
Итак, вот мой сервис, которые работает с "базой данных":
@Injectable() export class QuestionsService {
private questions: Question[];
constructor() { this.questions = localStorage.questions ? JSON.parse(localStorage.questions) : []; }
getQuestions() { console.log('qqq'); return this.questions; };
setQuestions(question): void { this.questions.push(question); localStorage.questions = JSON.stringify(this.questions); };
}
Вот описанный тип:
export class Question { text: string; speakerId: number; dateHuman: string; dateUnix: string; }
Вот компонент:
export class QuestionComponent implements OnInit {
private questions: Question[] = [];
constructor(private questionsService: QuestionsService) { }
ngOnInit() { this.getQuestions(); console.log(this.questions); }
private sendQuestion(): void { this.questionsService.setQuestions({ "text": "42256yregd", "speakerId": 23, "dateHuman": "223 oct", "dateUnix": "22222" }); };
private getQuestions(): void { this.questionsService.getQuestions().map(question => { this.questions.push(question); }); };
}
Эта система работает. Но мне хотелось бы использовать новые модные геттеры и сеттеры из стандарта es6. Вот моя попытка:
Сервис:
private questions: Question[];
constructor() { this.questions = localStorage.questions ? JSON.parse(localStorage.questions) : []; }
get questions() { console.log('qqq'); return this.questions; };
set questions(question): void { this.questions.push(question); localStorage.questions = JSON.stringify(this.questions); };
компонент:
.... ..
private sendQuestion(): void { this.questionsService.questions = { "text": "42256yregd", "speakerId": 23, "dateHuman": "223 oct", "dateUnix": "22222" }; };
private getQuestions(): void { this.questionsService.questions().map(question => { this.questions.push(question); }); };
.... ....
Но консоль выводит ошибку:
Duplicate identifier 'questions'.


Ответ

Проблема у вас вот в чем:
private questions: Question[]; // раз
get questions() { // два set questions(question): void {
У вас объявлено два свойства с одним именем. Так нельзя делать, о чем вам и говорит tsc. Эта проблема решается добавлением префикса к приватному свойству:
private _questions: Question[];
get questions() { set questions(question): void {

Комментариев нет:

Отправить комментарий