Що робить ключове слово implements?
1. Що робить implements
Ключове слово
implementsкаже TypeScript: "Цей клас обіцяє реалізувати всі властивості й методи, які описані в інтерфейсі".
Якщо клас не реалізує щось з інтерфейсу, TypeScript видасть помилку компіляції.
Приклад
interface Person {
name: string;
greet(): void;
}
class User implements Person {
name: string;
constructor(name: string) {
this.name = name;
}
greet() {
console.log(`Привіт, ${this.name}!`);
}
}Все коректно:
Клас User реалізує інтерфейс Person,
тому що він містить і name, і greet().
2. Що буде, якщо клас не реалізує все
interface Person {
name: string;
greet(): void;
}
class User implements Person {
name: string;
}
// Помилка: відсутній метод greet()TypeScript вимагатиме, щоб клас строго відповідав інтерфейсу, інакше збірка не пройде.
3. Реалізація кількох інтерфейсів
Клас може реалізувати кілька інтерфейсів одразу, перелічених через кому.
interface Flyable {
fly(): void;
}
interface Swimmable {
swim(): void;
}
class Duck implements Flyable, Swimmable {
fly() {
console.log("Летить");
}
swim() {
console.log("Пливе");
}
}Клас
Duckзобов'язаний реалізувати всі методи з обох інтерфейсів.
4. Відмінність implements від extends
| Ключове слово | Де використовується | Що робить |
|---|---|---|
extends | між класами або інтерфейсами | Успадковує реалізацію або структуру |
implements | у класах | Гарантує реалізацію інтерфейсу (контракту) |
Приклад: extends vs implements
interface Animal {
eat(): void;
}
interface Flyable {
fly(): void;
}
class Bird implements Animal, Flyable {
eat() {
console.log("Клює зерно");
}
fly() {
console.log("Летить");
}
}
class Eagle extends Bird {
hunt() {
console.log("Полює");
}
}
Bird implements Animal, Flyable- реалізує контракт.
Eagle extends Bird- успадковує реалізацію і додає нову.
5. implements перевіряє лише типізацію, а не поведінку
Інтерфейси в TypeScript існують тільки під час компіляції. Після компіляції в JavaScript:
- ключове слово
implementsзникає; - жодних перевірок у runtime немає.
interface Logger {
log(msg: string): void;
}
class ConsoleLogger implements Logger {
log(msg: string) {
console.log(msg);
}
}У підсумковому JavaScript-коді немає інтерфейсу і
implements, лише сам класConsoleLogger.
6. Можна реалізовувати інтерфейси з полями і методами
interface UserData {
id: number;
name: string;
getInfo(): string;
}
class User implements UserData {
id: number;
name: string;
constructor(id: number, name: string) {
this.id = id;
this.name = name;
}
getInfo() {
return `${this.name} (#${this.id})`;
}
}TypeScript перевірить:
- що є
idіnameпотрібних типів; - що є метод
getInfo(), який повертаєstring.
7. Реалізація інтерфейсів з readonly і опціональними полями
interface Config {
readonly version: string;
debug?: boolean;
}
class App implements Config {
version = "1.0.0";
// debug можна не реалізовувати, оскільки воно опціональне
}
readonlyзберігає своє значення, клас не зможе перевизначити властивістьversionпісля ініціалізації.
8. Можна реалізовувати інтерфейс, успадкований від інших
interface Entity {
id: number;
}
interface Timestamped {
createdAt: Date;
}
interface User extends Entity, Timestamped {
name: string;
}
class Admin implements User {
id = 1;
name = "Tim";
createdAt = new Date();
}
Adminреалізує всі властивості, включно з тими, що прийшли зEntityіTimestamped.
9. Можна використовувати implements для перевірки форми типу
TypeScript дозволяє використовувати інтерфейс як "договір" для класу, щоб гарантувати сумісність типів, навіть без успадкування:
interface Serializable {
toJSON(): string;
}
class Order implements Serializable {
constructor(public id: number, public total: number) {}
toJSON() {
return JSON.stringify({ id: this.id, total: this.total });
}
}Підсумок
implementsу TypeScript використовується в класах, щоб змусити клас реалізувати інтерфейс (або кілька).Воно:
- перевіряє, що клас містить усі поля і методи інтерфейсу;
- не додає нічого в runtime (лише перевірка типів);
- може застосовуватися до кількох інтерфейсів;
- робить код більш строгим і передбачуваним.
Відмінність від
extends:
extends- успадковує реалізацію (код, поля, методи);implements- гарантує реалізацію контракту (лише форму).
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.