Помогите пожалуйста отрефакторить код. Я написал компонент, который представляет из себя форму для отправки вопросов. Так же он выводит заданные на настоящий момент вопросы (пока в консоль, но это не принципиально). Вместо базы данных для учебных целей использую 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 {
Комментариев нет:
Отправить комментарий