В этом руководстве вы узнаете о типе данных TypeScript object
и о том, как писать точные объявления типа object
.
Введение в тип объекта TypeScript
Тип TypeScript object
представляет все значения, не относящиеся к примитивным типам.
Ниже приведены примитивные типы в TypeScript:
number
bigint
string
boolean
null
undefined
symbol
Ниже показано, как объявить переменную, содержащую объект:
let employee: object; employee = { firstName: 'John', lastName: 'Doe', age: 25, jobTitle: 'Web Developer' }; console.log(employee);
Выход:
{ firstName: 'John', lastName: 'Doe', age: 25, jobTitle: 'Web Developer' }
Если вы переназначите примитивное значение employee
, вы получите сообщение об ошибке:
employee = "Jane";
Ошибка:
error TS2322: Type '"Jane"' is not assignable to type 'object'.
Объект employee
является типом object
с фиксированным списком свойств. Если вы попытаетесь получить доступ к свойству, которого нет в employee
, вы получите сообщение об ошибке:
console.log(employee.hireDate);
Ошибка:
error TS2339: Property 'hireDate' does not exist on type 'object'.
Обратите внимание, что приведенный выше оператор отлично работает в JavaScript и вместо этого возвращает undefined
.
Чтобы явно указать свойства объекта employee
, вы сначала используете следующий синтаксис для объявления объекта employee
:
let employee: { firstName: string; lastName: string; age: number; jobTitle: string; };
А затем вы назначаете объект employee
буквальному объекту с описанными свойствами:
employee = { firstName: 'John', lastName: 'Doe', age: 25, jobTitle: 'Web Developer' };
Или вы можете объединить оба синтаксиса в одном выражении, например:
let employee: { firstName: string; lastName: string; age: number; jobTitle: string; } = { firstName: 'John', lastName: 'Doe', age: 25, jobTitle: 'Web Developer' };
object или Object
В TypeScript есть еще один тип, называемый Object
с буквой O
в верхнем регистре. Важно понимать различия между ними.
Тип object
представляет все не примитивные значения, а тип Object
описывает функциональность всех объектов.
Например, тип Object
имеет toString()
и valueOf()
, которые могут быть доступны любому объекту.
Тип empty {}
TypeScript имеет другой тип, называемый пустым типом, обозначаемый {}
, который очень похож на тип object. empty{}
описывает объект, который не имеет собственного свойства. Если вы попытаетесь получить доступ к свойству такого объекта, TypeScript выдаст ошибку времени компиляции:
let vacant: {}; vacant.firstName = 'John';
Ошибка:
error TS2339: Property 'firstName' does not exist on type '{}'.
Но вы можете получить доступ ко всем свойствам и методам, объявленным для типа Object
, которые доступны для объекта через цепочку прототипов:
let vacant: {} = {}; console.log(vacant.toString());
Выход:
[object Object]
Заключение
- Тип TypeScript
object
представляет любое значение, не являющееся примитивным значением. - Однако тип
Object
описывает функциональность, доступную для всех объектов. - Тип empty
{}
относится к объекту, который не имеет собственного свойства.