JS Tower
JavaScript & TypeScriptМодуль 7: Основы TypeScript

Type и Interface

Создание собственных типов

Цель урока

В этом уроке ты научишься:

  • Создавать type alias
  • Создавать interface
  • Понимать различия между ними

Type Alias

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

let user: User = {
  name: "Иван",
  age: 25
};

Для примитивов

type ID = string | number;
type Status = "active" | "inactive" | "pending";

let userId: ID = 123;
let status: Status = "active";

Interface

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

let user: User = {
  name: "Иван",
  age: 25
};

Расширение

Interface extends

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

interface Employee extends Person {
  position: string;
  salary: number;
}

let employee: Employee = {
  name: "Иван",
  age: 25,
  position: "Разработчик",
  salary: 100000
};

Type intersection

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

type Employee = Person & {
  position: string;
  salary: number;
};

Множественное расширение

interface Named {
  name: string;
}

interface Aged {
  age: number;
}

interface Person extends Named, Aged {
  email: string;
}

Declaration Merging

Только для interface:

interface User {
  name: string;
}

interface User {
  age: number;
}

// User = { name: string; age: number; }
let user: User = {
  name: "Иван",
  age: 25
};

Type не сливается

Type alias нельзя объявить дважды с одним именем.


Методы

interface User {
  name: string;
  greet(): string;
  greet2: () => string;
}

let user: User = {
  name: "Иван",
  greet() {
    return "Привет!";
  },
  greet2: () => "Привет!"
};

Type vs Interface

ВозможностьTypeInterface
ОбъектыДаДа
ПримитивыДаНет
UnionДаНет
Extends&extends
MergingНетДа
implementsДаДа

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

// Interface — для объектов и классов
interface User {
  name: string;
}

// Type — для union, примитивов, сложных типов
type Status = "active" | "inactive";
type ID = string | number;
type Callback = (data: string) => void;

Практика

Задание 1: Interface

Задача: Создай интерфейс для продукта.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
Телефон 50000

Задание 2: Расширение

Задача: Расширь интерфейс.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
Бобик Овчарка

Задание 3: Type alias

Задача: Создай type для статуса заказа.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
pending

Проверь себя

  1. Чем type отличается от interface?
  2. Что такое Declaration Merging?
  3. Когда использовать type, а когда interface?