Skip to main content

Чим дженерики відрізняються від any?

1. Головна відмінність

Особливістьanygenerics
ТипізаціяВимикає перевірку типівЗберігає інформацію про тип
БезпекаВтрата типобезпекиПовна типобезпека
Підстановка типівТип невідомийТип підставляється автоматично
ПризначенняШвидко "заткнути" помилку типівСтворити універсальну і типобезпечну функцію/тип

2. Приклад з any

javascript
function identity(value: any): any { return value; } const result = identity("Hello"); result.toFixed(); // Помилка з'явиться лише в runtime

TypeScript не знає, що result - рядок, і спокійно дозволяє викликати toFixed(), що призведе до помилки під час виконання.


3. Приклад з generics

javascript
function identity<T>(value: T): T { return value; } const result = identity("Hello"); result.toUpperCase(); // Все коректно result.toFixed(); // Помилка на етапі компіляції

T зберігає інформацію про тип (string), і TypeScript знає, які методи доступні.


4. Дженерики "гнучкі", але типізовані

javascript
function merge<T, U>(a: T, b: U): T & U { return Object.assign({}, a, b); } const person = merge({ name: "Tim" }, { age: 25 }); // person має тип { name: string; age: number }

При any TypeScript не зміг би вивести точний тип об'єднаного об'єкта.


5. Чому any небезпечний

javascript
let value: any = 5; value = "text"; value = true; value.push(1); // Помилка лише в runtime

any ламає всі гарантії типізації - TypeScript перестає вам допомагати.


6. Коли використовувати

Коли використовуватиЧому
genericsКоли хочете гнучкість і типобезпеку (бібліотеки, утиліти, React-хуки тощо)
anyЛише як тимчасове рішення під час міграції або складної типізації

Підсумок

any - «вимикач» типізації. generics - «розумна абстракція», яка підлаштовується під типи, але їх не втрачає.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.