У меня есть сервис, который возвращает объект с датами:
@Injectable()
export class DateService {
constructor() { }
getNowDate(): Object {
let d = new Date();
d.setHours(d.getHours() + 3);
let dateHuman = d.toISOString();
let unixTimeStamp = Math.floor(d.getTime() / 1000) - (60 * 60 * 3);
return {
dateHuman: dateHuman,
unixTimeStamp: unixTimeStamp
};
};
}
Я его использую в компоненте так:
import { DateService } from '../services/date.service';
@Component({
selector: 'app-question',
templateUrl: './question.component.html',
styleUrls: ['./question.component.scss']
})
export class QuestionComponent implements OnInit {
constructor(private dateService: DateService) { }
ngOnInit() {
console.log(this.dateService.getNowDate()['dateHuman']);
}
}
Всё ок - дата выводится. Но если я пытаюсь выводить дату так:
ngOnInit() {
console.log(this.dateService.getNowDate().dateHuman);
}
То получаю следующую ошибку:
Property 'dateHuman' does not exist on type 'Object'.
Объясните пожалуйста в чём причина этого явления, почему в данном случае обращение к свойству через точку и через скобку не равноценны?
Проблема в проверке компилятором:
при обращении через точку, компилятор проверяет, есть ли указанное свойство в типе или нет
при обращении через скобки - не проверяет.
В примере в вопросе: метод getNowDate возвращает объект типа Object, в этом типе нет свойства dateHuman, поэтому при проверке компилятор выбрасывает указанную ошибку.
Проблема - вот в этой строчке:
getNowDate(): Object
Здесь вы объявляете, что метод getNowDate возвращает Object - а у типа Object нет свойства dateHuman.
Уберите явное указание типа возвращаемого значения у метода чтобы позволить компилятору самому вывести его из оператора return.
Альтернативный вариант - объявите интерфейс, который будет возвращать ваш метод:
interface IDateInfo {
dateHuman: string;
unixTimeStamp: number;
}
getNowDate(): IDateInfo
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники