Поля интерфейса могут быть объектами и массивами:
interface Order { id: number; items: string[]; customer: { name: string; city: string }; createdAt: readonly string; // нельзя менять после создания }
Модификатор readonly запрещает менять поле после задания — защита от случайной правки.
Интерфейсы можно расширять, наследуя поля:
interface Animal { name: string; } interface Dog extends Animal { breed: string; }
Объект типа Dog обязан иметь и name, и breed.
Когда выбирать interface, а когда type? Для описания формы объектов чаще берут interface (его удобно расширять). Для объединений и сложных конструкций — type. На практике оба взаимозаменяемы во многих случаях, выбирайте по стилю команды.