Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Чим дженерики відрізняються від any?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`any`** вимикає перевірку типів і повністю втрачає типобезпеку, тоді як **generics** (`<T>`) зберігають інформацію про тип і підставляють його автоматично, залишаючи повну типобезпеку. **Ключове:** generics дають гнучкість без втрати перевірки типів (наприклад, помилковий виклик методу зловиться на етапі компіляції), тоді як з `any` та сама помилка проявиться лише в runtime.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення### 1. Головна відмінність | Особливість | `any` | `generics` | |---|---|---| | Типізація | **Вимикає** перевірку типів | **Зберігає** інформацію про тип | | Безпека | Втрата типобезпеки | Повна типобезпека | | Підстановка типів | Тип невідомий | Тип підставляється автоматично | | Призначення | Швидко "заткнути" помилку типів | Створити універсальну і типобезпечну функцію/тип | --- ### 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` - «розумна абстракція», яка **підлаштовується під типи**, але їх **не втрачає**.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.