Коротка відповідь
juniorСтатична типізація — це перевірка типів під час компіляції; динамічна типізація — це перевірка типів під час виконання. У TypeScript використовується статична, а в JavaScript — динамічна.
Повне пояснення
Що це і навіщо
- Статична типізація – визначення типів змінних, параметрів і повертаємих значень на етапі компіляції. Це дозволяє виявити помилки ще до запуску коду, підвищуючи надійність і читабельність.
- Динамічна типізація – визначення типів під час виконання. JavaScript, Python, Ruby тощо працюють динамічно, що забезпечує гнучкість, але збільшує ризик runtime‑помилок.
Ключові принципи/терміни
- Тип – опис структури даних (наприклад,
number,string,Array<string>). - Типова система – набір правил, що визначає, які операції допустимі для конкретного типу.
- TypeScript – надбудова над JavaScript, що додає статичну типізацію.
- JSDoc – коментарі, що дозволяють інструментам типізувати JavaScript.
Як це працює
- У статичній типізації компілятор (наприклад,
tsc) аналізує код, порівнює типи і генерує помилки при несумісності. - У динамічній типізації браузер або V8 виконують код, визначаючи типи під час кожної операції.
Практика і реалізація (JavaScript/TypeScript)
// TypeScript – статична типізація
function sum(a: number, b: number): number {
return a + b;
}
// JavaScript – динамічна типізація
function sum(a, b) {
return a + b;
}
Тестування
- Для TypeScript можна використовувати Jest з
ts-jestдля типового тестування. - Для JavaScript – Jest без додаткових налаштувань, але можна перевіряти типи через
typeof.
Безпека та приватність
- Статична типізація допомагає уникнути небажаних типових помилок, що може зменшити вразливості.
- Динамічна типізація потребує ретельної валідації вводу, особливо у бекенді.
Оптимізація
- Статичні типи дозволяють інструментам оптимізувати код під час компіляції.
- Динамічні типи можуть призвести до додаткових перевірок у runtime.
Часті помилки
- Невідповідність типу – передача
stringтам, де очікуєтьсяnumber. - Неявне типування – використання
any, що знижує переваги статичної типізації. - Втрата типу при розпакуванні – неправильне використання
asу TypeScript. - Перевантаження функцій – в JavaScript немає перевантажень, тому треба обробляти різні сигнатури вручну.
Cheatsheet
number,string,boolean,Array<T>,Record<K, V>,unknown,any.interface,type,enum– для складних типів.
Follow‑up питання
- Як працює
unknownу TypeScript? – відповідає, що це тип безпеки, який потребує перевірки перед використанням. - Чому
anyслід уникати? – бо він відключає перевірку типів, що порушує переваги статичної типізації.