Чому TS не вимагає завжди писати типи явно?
1. TypeScript сам "розуміє" типи з контексту
Коли ти оголошуєш змінну і присвоюєш їй значення, TypeScript аналізує це значення і автоматично присвоює йому відповідний тип.
let name = "Alice";
// TS розуміє: name має тип stringТому писати
let name: string = "Alice"- необов'язково. TypeScript сам виведе типstringіз присвоєного значення.
2. Це називається type inference (виведення типів)
TypeScript уміє "вгадувати" тип:
- із присвоєного значення (
let count = 5->number); - із значення, яке повертає функція;
- із типу аргументів функції;
- із контексту виклику (наприклад, у колбеках, деструктуризації тощо).
Приклад:
function greet(name = "гість") {
return `Привіт, ${name}!`;
}
// TypeScript виводить: name - string, тип, що повертається, - string3. Приклад: функція з виведенням типу значення, що повертається
function add(a: number, b: number) {
return a + b;
}TypeScript автоматично визначає, що функція повертає number,
тому що a і b - числа.
Тобто можна не писати
: numberпісля дужок - тип виведеться сам.
4. Приклад з масивами й об'єктами
let numbers = [1, 2, 3];
// TypeScript виводить тип: number[]
let user = { id: 1, name: "Tim" };
// TypeScript виводить тип: { id: number; name: string; }Якщо пізніше ти спробуєш додати до
numbersрядок - компілятор не дозволить, тому що вже знає, що це масив чисел.
5. Чому це корисно
- Менше коду - не потрібно дублювати очевидні типи.
- Код чистіший і читабельніший - типи залишаються там, де вони справді потрібні.
- Типи все одно є - навіть якщо ти їх не пишеш, TypeScript зберігає їх "в умі".
- Автодоповнення в IDE так само працює (TS знає inferred-типи).
6. Але іноді потрібно писати типи явно
TypeScript не завжди може точно вивести тип, наприклад:
- при ініціалізації змінної без значення;
- при поверненні складних типів (
Promise,union,generic); - коли важливо зафіксувати тип (щоб не змінювався динамічно).
Приклад:
let id; // тип any - без анотації TypeScript не знає, що це
id = 5; // тепер number
id = "5"; // теж допустимо - тип став any
// Краще явно:
let id: number;7. Правило "розумної надлишковості"
TypeScript намагається не змушувати тебе писати те, що й так очевидно. Типи потрібні там, де:
- компілятор не може їх вивести,
- або де вони важливі для чіткого контракту між частинами коду (наприклад, інтерфейси, функції, API).
Підсумок
TypeScript не вимагає завжди писати типи, тому що він уміє автоматично виводити їх з контексту коду - цей процес називається type inference.
Це робить код чистим, але водночас безпечним, зберігаючи всі переваги типізації без надлишковості.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.