Що таке інтерфейс у TypeScript?
1. Що таке інтерфейс
Інтерфейс у TypeScript - це контракт структури даних, який описує, які властивості та методи повинні бути присутні в об'єкта, і які в них типи.
Іншими словами: інтерфейс говорить «які дані очікуються», але не описує «як вони реалізовані».
Простий приклад
interface User {
id: number;
name: string;
isAdmin: boolean;
}
const user: User = {
id: 1,
name: "Tim",
isAdmin: true,
};Компілятор перевірить, що об'єкт
userмістить усі поля (id,name,isAdmin) і що їхні типи відповідають інтерфейсу.
2. Інтерфейси потрібні лише на етапі компіляції
Інтерфейси не існують у JavaScript-коді - вони повністю видаляються після компіляції. TypeScript використовує їх лише для перевірки типів і підказок IDE.
interface Product {
id: number;
title: string;
}Після компіляції цей код перетворюється на:
// (Інтерфейс зник)3. Необов'язкові та тільки для читання властивості
Необов'язкові властивості - знак ?
interface Product {
id: number;
title: string;
description?: string; // можна не вказувати
}Тільки для читання - readonly
interface User {
readonly id: number;
name: string;
}
const u: User = { id: 1, name: "Tim" };
u.id = 2; // Помилка: id не можна змінити4. Інтерфейси можуть описувати функції
interface Greeter {
(name: string): string;
}
const greet: Greeter = (name) => `Hello, ${name}!`;Тут інтерфейс визначає сигнатуру функції - які аргументи і що вона повертає.
5. Інтерфейси та класи
Класи можуть реалізовувати інтерфейси через implements.
interface Person {
name: string;
sayHello(): void;
}
class User implements Person {
constructor(public name: string) {}
sayHello() {
console.log(`Hello, ${this.name}!`);
}
}TypeScript гарантує, що клас
Userреалізує все, що вимагаєPerson.
6. Успадкування інтерфейсів (extends)
Інтерфейси можна розширювати, створюючи ієрархію типів.
interface Animal {
name: string;
}
interface Dog extends Animal {
bark(): void;
}
const rex: Dog = {
name: "Rex",
bark() {
console.log("Woof!");
},
};
Dogвключає всі поляAnimal, додаючи свої.
7. Індексні сигнатури
Якщо заздалегідь невідомі імена властивостей, можна описати їхню форму через індекс:
interface Dictionary {
[key: string]: string;
}
const colors: Dictionary = {
red: "#ff0000",
green: "#00ff00",
};8. Об'єднання інтерфейсів (Declaration Merging)
Якщо оголосити два інтерфейси з однаковим ім'ям - TypeScript об'єднає їх:
interface User {
id: number;
}
interface User {
name: string;
}
const u: User = { id: 1, name: "Tim" }; // об'єднана структураЦе особливість інтерфейсів -
typeтак не вміє.
9. Різниця між interface і type
| Можливість | interface | type |
|---|---|---|
| Опис об'єктів і класів | Так | Так |
Розширення (extends) | Так | Так (&) |
| Union / Intersection | Ні | Так |
| Tuple, функції, примітиви | Частково | Так |
| Об'єднання декларацій (merging) | Так | Ні |
Реалізація в класі (implements) | Так | Так |
Правило просте:
interface- для об'єктів і класів,type- для комбінацій і просунутих типів.
Підсумок
Інтерфейс (
interface) у TypeScript - це механізм для опису структури даних (контракту): які властивості, методи і типи даних очікуються.Він:
- допомагає IDE підказувати і перевіряти код;
- гарантує, що об'єкти і класи відповідають заданій структурі;
- може успадковуватися і об'єднуватися;
- не існує в підсумковому JavaScript - потрібен лише для типізації.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.