TypeScript различает примитивные типы (string, number, boolean) и их объектные обёртки (String, Number, Boolean). Обёртки — это объекты, созданные через конструкторы:
const primitive: string = 'hello'; const wrapper: String = new String('hello');
primitive === wrapper — результат false:console.log('hello' === new String('hello')); // false
string, а не String).Можно ли использовать типы-обёртки (
String,Number,Boolean) в интерфейсах TypeScript, если значения — примитивы?
Ответ: Не рекомендуется использовать обёртки: в большинстве случаев значения будут примитивами, и прямое наследование интерфейса от типа-обёртки приведёт к ошибкам. Лучше всегда использовать string, number, boolean.
История
В веб-приложении для хранения ФИО был использован тип String в интерфейсе пользователя. Это привело к ошибкам сравнения и неправильному прохождению unit-тестов, требующих строго идентичных типов (примитивы и их обёртки различаются по идентичности).
История
Библиотечный разработчик типизировал generic-функцию через Number, и клиенты библиотеки подсунули примитивные значения, что вызвало проблемы с методом type guards, неожиданно не сработавших для примитивов. Возникла сложная к отладке ошибка приведения типов.
История
В аналитическом сервисе был использован тип Boolean для флага активности пользователя, и результат сравнения возле фильтрации данных всегда был false, хотя визуально значения совпадали. Вызвало некорректную обработку данных и падение отчётов.