# Структура объекта в TypeScript

Можно не полагаться на TypeScript в плане определения структуры объекта, а указать ее в качестве типа при объявлении переменной.

Давайте например при объявлении переменной `user` скажем, что она объект, в поле `name` которого хранится - строка, а в поле `age` - число:

`let user: {name: string, age: number};`

Запишем теперь в нашу переменную соответствующий объект:

`user = {name: 'john', age: 30};`

Можно слить обе операции в одну строку: объявить объект и сразу записать в него значение:

`let user: {name: string, age: number} = {name: 'john', age: 30};`

После этого TypeScript займется контролем структуры и типов данных объекта и будет выдавать ошибку при попытке что-то изменить неправильным образом. Пример:

`user.name = 123; // ошибка`

## Необязательные свойства

При объявлении объекта можно указать часть свойств как необязательные. Для этого после имени свойства нужно указать знак вопроса.

Для примера давайте в объекте с юзером сделаем необязательным свойство `age`:

`let user: {name: string, age?: number};`

Теперь мы можем записать в переменную объект с одним только свойством `name`:

`user = {name: 'john'};`

Либо можем записать объект, имеющий и свойство `name`, и свойство `age`:

`user = {name: 'john', age: 30};`

## Практические задачи

Не запуская код определите каким будет результат выполнения кода:

`let date = {year: number, month: number, day: number}; date = {year: 2025, month: 12, day: '01'};`

Не запуская код определите каким будет результат выполнения кода:

`let date = {year: number, month: number, day?: number}; date = {year: 2025, month: 12};`
←→
↑