#typescript
#typescript
Вопрос:
Я искал это, и мне трудно найти где-либо, что объясняет, как это сделать..
У меня есть класс:
export class CalendarLayout {
private displayedColumns: number;
private displayedHours: number;
private calendarStartDatePosition: moment.Moment;
private dayDifference: number;
constructor(
displayedColumns: number,
displayedHours: number,
calendarStartDatePosition: moment.Moment,
dayDifference: number
) {
this.displayedColumns = displayedColumns;
this.displayedHours = displayedHours;
this.calendarStartDatePosition = calendarStartDatePosition;
this.dayDifference = dayDifference;
}
}
На самом деле я хотел, чтобы dayDifference было вычисляемым значением на основе calendarStartDatePosition.
dayDifference = this.calendarStartDatePosition.diff(moment(), 'days');
Я пытался использовать геттеры и сеттеры безрезультатно. Кроме того, компилятор пожаловался, что он не получает значение для dayDifference ..
Как у вас есть свойство класса, в моем случае «dayDifference», которое само по себе вычисляется из одного из других свойств? Кроме того, если я обновляю свойство calendarStartDatePosition, свойство dayDifference автоматически обновляется.
Комментарии:
1. Вы хотите определить средство получения, судя по его звукам.
2. Не уверен, как вы это делаете правильно
3.
get dayDifference() { /* code that calculates value */ }
Достаточно было бы чего-то вроде.4. Просто определите средство получения (как я ссылался). Это свойство.
5. В качестве дополнительного примечания, учитывая, что это не относится к TypeScript, здесь могло бы хватить тега JavaScript.
Ответ №1:
Я вставил комментарии в предоставленный вами код:
export class CalendarLayout {
private displayedColumns: number;
private displayedHours: number;
private calendarStartDatePosition: moment.Moment;
// private dayDifference: number;
// We can define a getter (private as before).
// This will *automatically* calculate the relevant value
// when asked (via `this.dayDifference`, no method call).
private get dayDifference() {
return this.calendarStartDatePosition.diff(moment(), 'days');
}
constructor(
displayedColumns: number,
displayedHours: number,
calendarStartDatePosition: moment.Moment,
// dayDifference: number // Calculated automatically
) {
this.displayedColumns = displayedColumns;
this.displayedHours = displayedHours;
this.calendarStartDatePosition = calendarStartDatePosition;
// We no longer need to set this, as we're calculating it as needed.
// this.dayDifference = dayDifference;
}
}
Я не знаком с Moment.js , но вам может понадобиться глобальный объект, из которого вы можете получить текущее время; Я полагаю, что текущий код создает новый экземпляр при каждом вызове.