Что такое типизация в JavaScript?
Что проверяют
Понимаете ли вы, что в JavaScript тип принадлежит значению, а не переменной, и что язык не просто динамический, а ещё и слабый: он молча приводит типы сам. Для фронтенда это ежедневная тема, потому что данные приходят из форм и из сети, и там типы не гарантированы ничем.
Как отвечать
Сначала два независимых свойства. Динамическая типизация: тип определяется у значения в момент выполнения, одна и та же переменная может ссылаться на значения разных типов. Слабая типизация: в операциях язык приводит типы сам, поэтому сложение числа со строкой даёт строку, а нестрогое равенство сравнивает после приведения.
Перечислите примитивы: строка, число, большое целое, логический тип, undefined, символ и null. Всё остальное объекты, включая функции и массивы.
typeof 42 // "number"
typeof null // "object"
typeof [1, 2] // "object"
"5" + 1 // "51"
"5" - 1 // 4
NaN === NaN // falseОтсюда рабочие правила: сравнивать строгим равенством, проверять массив через Array.isArray, а не через typeof; NaN ловить через Number.isNaN; помнить, что typeof null отдаёт объект из-за старой ошибки, которую не чинят ради совместимости.
Закончите про TypeScript: он добавляет проверку на этапе сборки, но типы стираются и в браузер не попадают. Значит ответ сервера всё равно нужно валидировать в рантайме, иначе объявленный в коде интерфейс не гарантирует ровным счётом ничего.
Где спотыкаются
Называют язык нетипизированным. Типы есть, просто проверяются во время выполнения; правильная пара слов это динамическая и слабая типизация, и вторую часть обычно забывают.
Считают, что TypeScript защищает во время работы приложения, и принимают ответ бэкенда как есть. Проверок после сборки нет, и первое же несовпадение формата ломает экран у пользователя.
Путают null и undefined и не могут объяснить разницу: undefined это отсутствие значения, до которого никто не дошёл, null это осознанно поставленная пустота, и приходят они из разных мест.