Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите разобраться в ошибке кода. Typescript ругается и пишет в терминале, что свойство age не существует в типе "{}"

Арни Ученик (145), открыт 2 недели назад
 const obj = Object.create(
{
calculateBirthYear() {
return console.log(new Date().getFullYear() - this.age);
},
},
{
name: {
value: 'Radik',
enumerable: true,
},
age: {
value: 46,
enumerable: true,
},
}
);
Дополнен 2 недели назад
я просто учусь, и просьба помочь мне. Пример взят с youtube. Но там использовался чистый JavaScript.
3 ответа
Максим Искусственный Интеллект (199946) 2 недели назад
Потому что он this.age объекта не может ни с чем связать. Попробуй объявить поле age.
АрниУченик (145) 2 недели назад
Максим, доброй ночи! Вот ссылка видео по которому взят пример, там не было никакого объявления поля age.
АрниУченик (145) 2 недели назад
я по ней перехожу, все ок
АрниУченик (145) 2 недели назад
ну в любом случае у данного объекта же есть свойство age. Соответственно, я тогда не понимаю почему this.age вызывает ошибку, если я пишу его внутри метода Object.create?
Максим Искусственный Интеллект (199946)
 { 
  calculateBirthYear() { 
    return console.log(new Date().getFullYear() - this.age); 
}
 
У этого объекта не существует свойства age и в данном случае вызов calculateBirthYear приведет к тому, что this.age будет undefined при вызове.
АрниУченик (145) 2 недели назад
и как правильно написать ?
Максим Искусственный Интеллект (199946) Либо начни с уроков сразу по TypeScript и сразу изучай типы и как с ними работать, либо работай с JavaScript. Но желательно смотри такие уроки, которые тебя научат основам, а не запутают.
а Мыслитель (5353) 2 недели назад
вообще не понимаю смысл возвращения console.log(). Там же по сути true
Пофиг что выводить в консоль. и константой сие чудо быть не может
Что ж ты учишься на дебильных примерах, а отвечающим кидаешь непонятки
Татьяна Просветленный (28731) 2 недели назад
Ошибка, которую вы видите, связана с тем, что TypeScript по умолчанию не знает, что ваш объект obj имеет свойство age. В чистом JavaScript такие ошибки не возникают, так как JavaScript динамически типизирован. В TypeScript нужно явно указывать типы, чтобы избежать подобных ошибок.

В вашем случае, вы можете создать интерфейс, описывающий структуру вашего объекта, и использовать приведение типов. Как можно это сделать:
 interface Person { 
name: string;
age: number;
calculateBirthYear: () => void;
}

const obj = Object.create(
{
calculateBirthYear() {
return console.log(new Date().getFullYear() - this.age);
},
},
{
name: {
value: 'Radik',
enumerable: true,
},
age: {
value: 46,
enumerable: true,
},
}
) as Person;

obj.calculateBirthYear(); // Должно вывести в консоль 1978
Результат выполнения программы что код работает
АрниУченик (145) 2 недели назад
Спасибо огромное
Похожие вопросы