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
| Возможность | Type | Interface |
|---|---|---|
| Объекты | Да | Да |
| Примитивы | Да | Нет |
| 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
Проверь себя
- Чем type отличается от interface?
- Что такое Declaration Merging?
- Когда использовать type, а когда interface?