# Объекты в объектах/массивах - описание типов

Объекты могут иметь внутри себя структуру любой вложенности и эта структура может быть описана при объявлении объекта или в интерфейсе.

Описание объекта и вложенного в него объекта

interface User {
	name: string,
	age: number,
	parents: {
		mother: string,
		father: string
	}
}

let user: User = {
	name: 'john',
	age: 30,
	parents: {
		mother: 'jane',
		father: 'eric'
	}
}

Описание объекта и вложенного в него массива

interface User {
	name: string,
	age: number,
	parents: string[]
}

let user: User = {
	name: 'john',
	age: 30,
	parents: ['one', 'two', 'three']
}

Пусть у нас есть интерфейс Period, описывающий объект, хранящий в себе две даты встроенного в JavaScript класса Date:

interface Period {
	date1: Date,
	date2: Date
};
let period: Period = {
	date1: new Date(2030, 11, 31),
	date2: new Date(2020, 11, 31)
};

Описание объект через интерфейс - возможность №2

Пример - 1

iterface City {
	name: string
}

interface User {
	name: string,
	age: number,
	city: City
}

let city: City = { name: 'london' };
let user: User = { name: 'john', age: 30, city: city };
Вариант - 2
Не обязательно для города создавать отдельную переменную.
		
let user: User = {
	name: 'john',
	age: 30,
	city: {name: 'london'}
};