Урок 01

Type и Interface: основы

В TypeScript две конструкции для описания формы объекта: type и interface. Обе создают именованный тип, но с разными возможностями.

Объявление

type User = {
    name: string;
    age: number;
};

interface User {
    name: string;
    age: number;
}

Результат один и тот же: User описывает объект с полями name и age.

Использование

const user: User = { name: 'Алиса', age: 25 };

function greet(user: User) {
    return `Привет, ${user.name}`;
}

Алиасы

type может описать что угодно, не только объект:

type ID = string | number;
type Status = 'idle' | 'loading' | 'success';
type Pair = [string, number];
type Handler = (event: Event) => void;

interface — только форму объекта.

Когда что использовать

interface:

  • Публичные API
  • Классы (implements)
  • Расширение существующих типов (declaration merging)

type:

  • Union, кортежи, примитивы
  • Условные и маппированные типы
  • Функции
  • Всё, что не форма объекта

Разница в расширении

// interface — через extends
interface Animal {
    name: string;
}

interface Dog extends Animal {
    breed: string;
}

// type — через пересечение
type Animal = { name: string };
type Dog = Animal & { breed: string };

Оба работают. Синтаксис разный.

Рекомендация

В одном проекте — один стиль. Многие современные проекты выбирают type из-за гибкости. Некоторые используют interface для объектов и type для всего остального.

Главное — не смешивать без причины.