Что такое динамическая типизация?
Основы языка
Динамическая типизация — это модель, при которой тип переменной определяется во время выполнения по её значению, а не задаётся заранее. Переменная может менять тип по ходу.
Что это значит
Не нужно объявлять тип; переменная связывается с типом значения в рантайме и может его сменить:
let x = 42; // number
x = 'строка'; // теперь string — ошибки нет
x = true; // теперь booleanПлюсы
- Гибкость и скорость написания кода.
- Меньше «церемоний», проще прототипировать.
- Одна функция легко работает с разными типами.
Минусы
- Ошибки типов всплывают в рантайме, а не при компиляции.
- Меньше подсказок IDE и автодополнения.
- Неявные приведения типов (
'5' + 1 === '51') порождают баги.
Динамическая против статической
- Динамическая (JavaScript, Python) — тип в рантайме, гибко, но рискованно.
- Статическая (Java, TypeScript) — тип известен на этапе компиляции, ошибки ловятся раньше.
TypeScript добавляет статическую типизацию поверх JS, сохраняя его в рантайме динамическим.
Слабая типизация
JavaScript ещё и слабо типизирован — активно приводит типы (==, конкатенация). Это отдельное от динамичности свойство.
Коротко для собеседования
Динамическая типизация — тип определяется в рантайме по значению, переменная может менять тип. Плюс — гибкость, минус — ошибки типов всплывают при выполнении. JS также слабо типизирован (неявные приведения). TypeScript добавляет статическую проверку на этапе компиляции.