Объекты в TypeScript

Объекты в TypeScript ведут себя особым образом. При объявлении объектов тип данных не указывается. Для примера сделаем объект с юзером, хранящий в себе его имя и возраст:

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

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

Контроль типа переменной

TypeScript контролирует тип переменной с объектом, запрещая записывать в нее данные другого типа. Посмотрим на примере. Пусть у нас дан объект с юзером:

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

Попробуем записать в эту переменную данные другого типа, например, строку. Мы получим ошибку:

user = 'eric'; // ошибка

Контроль структуры объекта

TypeScript также контролирует структуру объекта. Пусть мы объявили наш объект с юзером:

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

В момент объявления TypeScript запоминает, что в нашем объекте есть ключи name и age, а затем контролирует, чтобы в переменной хранился объект именно с этими ключами.

Попытка записать в переменную другой объект приводит к ошибке компиляции. Давайте попробуем. Запишем в переменную объект, в котором не хватает ключа:

user = {name: 'eric'}; // ошибка

Запишем в переменную объект, в котором лишний ключ:

user = {name: 'eric', age: 40, salary: 300}; // ошибка

А теперь запишем в переменную объект, содержащий только ключи name и age:

user = {name: 'eric', age: 40}; // работает

Контроль типов значений

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

Посмотрим на примере нашего объекта с юзером. Объявим его:

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

После объявления TypeScript проанализировал тип данных каждого значения и запомнил, что в поле name - строка, а в поле age - число.

Теперь попытка записать в поле значение другого типа закончится ошибкой.

Пример:

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

Пример:

user.age = 'eee'; // ошибка

Пример:

user.age = '30'; // ошибка

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

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

let date = {year: 2025, month: 12, day: 31}; date.isLeap = true; console.log(date);

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

let date = {year: 2025, month: 12, day: 31}; date = {year: 2025, month: 12};

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

let date = {year: 2025, month: 12, day: 31}; date = {year: 2025, month: 12, date: 7};