TypeScript interface: тип объекта и его свойства

Категория: JavaScript · Обновлено:

interface в TypeScript описывает форму объекта: обязательные и необязательные поля, методы и свойства только для чтения. Компилятор проверяет соответствие во время разработки, но интерфейс не создаёт runtime-валидацию и не проверяет данные из API автоматически.

Объявить интерфейс и типизировать объект

Текст
interface User {
  id: number;
  name: string;
  email?: string;
  readonly createdAt: Date;
}

const user: User = {id: 7, name: 'Ира', createdAt: new Date()};

Знак ? делает поле необязательным. readonly запрещает обычное переназначение свойства после создания объекта, но не замораживает вложенные объекты во время выполнения.

Добавить метод и расширить интерфейс

Текст
interface Identified { id: number }

interface Account extends Identified {
  login(): string;
}

const account: Account = {id: 7, login: () => 'ira'};

Синтаксис

Значение

email?: string

Поле может отсутствовать

readonly id: number

Поле нельзя переназначить в обычном TS-коде

interface B extends A

Новый интерфейс наследует контракт A

login(): string

Метод возвращает строку

Чем interface отличается от type?

Оба описывают типы объектов. type дополнительно удобен для union и пересечений; interface поддерживает расширение и декларативное объединение одноимённых объявлений.

Можно ли сделать все поля необязательными?

Используйте utility type Partial<User>, если частичный объект действительно нужен в этом сценарии. Для обновления API отдельно определите, как трактуются пропущенные поля.