Преобразование числа в строку в TypeScript: как правильно и без ошибок?
Основные способы преобразования числа в строку в TypeScript
В TypeScript есть несколько способов преобразовать число в строку. Все они валидны, но имеют свои особенности. Разберем каждый из них.
1. Использование глобальной функции String()
const num: number = 42;
const str: string = String(num); // "42"
Этот способ безопасен и явно показывает намерение преобразовать значение. String() вызывается как обычная функция (не конструктор), поэтому возвращает строку, а не объект String. TypeScript корректно выводит тип string.
2. Метод .toString() с указанием системы счисления
const num: number = 42;
const str: string = num.toString(); // "42"
const hex: string = num.toString(16); // "2a"
Метод .toString() доступен у всех чисел. Он принимает необязательный аргумент — основание системы счисления (от 2 до 36). Это удобно для преобразования в шестнадцатеричный или двоичный формат. Однако помните: num.toString() вызовет ошибку, если num может быть null или undefined.
3. Шаблонные строки (Template literals)
const num: number = 42;
const str: string = `${num}`; // "42"
Это самый элегантный способ в современном TypeScript/JavaScript. TypeScript автоматически преобразует число в строку при использовании шаблонной строки. Тип результата — string. Этот метод также работает с любыми типами, которые можно преобразовать в строку.
4. Конкатенация с пустой строкой
const num: number = 42;
const str: string = num + ""; // "42"
Классический JavaScript-трюк. Работает, но может сбивать с толку других разработчиков. TypeScript корректно выводит тип string.
Сравнение подходов
- Производительность: Все методы имеют сопоставимую производительность. Разница микроскопическая и не влияет на реальные приложения.
- Безопасность типов:
String()и шаблонные строки безопаснее, так как не вызывают ошибку приnull/undefined(они преобразуются в строку "null"/"undefined"). - Читаемость: Шаблонные строки — самый современный и читаемый способ.
- Гибкость:
.toString(16)незаменим для работы с системами счисления.
Рекомендация для TypeScript
Используйте шаблонные строки `${value}` для простого преобразования. Это идиоматично, читаемо и безопасно. Если нужно указать систему счисления — используйте .toString(radix). Если код пишется в старом стиле или вы хотите явно показать намерение — String(value).
Пример с обработкой null/undefined
function formatUserId(id: number | null | undefined): string {
// Шаблонная строка безопасна
return `User #${id}`; // "User #null" или "User #undefined"
}
function formatUserIdSafe(id: number | null | undefined): string {
// Лучше явно обработать
return id != null ? `User #${id}` : "User #unknown";
}
<<Альтернативный подход: использование утилитарного типа и кастомной функции
Если вы работаете с большим проектом и хотите гарантировать единообразие преобразований, можно создать собственный хелпер:
function toStringSafe(value: unknown): string {
if (value === null || value === undefined) {
return '';
}
return String(value);
}
// Использование
const num: number = 42;
const str: string = toStringSafe(num); // "42"
const nullableNum: number | null = null;
const emptyStr: string = toStringSafe(nullableNum); // ""
Важное замечание о TypeScript strict mode
При включенном strictNullChecks (рекомендуется) метод .toString() не будет работать с null | undefined. Поэтому в продакшн-коде лучше использовать String() или шаблонные строки.
Когда какой метод выбрать?
- Для API-запросов: используйте
String()или шаблонные строки — они всегда вернут строку. - Для форматирования чисел:
num.toFixed(2)возвращает строку с заданным количеством знаков после запятой. - Для локализации:
num.toLocaleString()возвращает строку с учетом региональных настроек.
Помните: TypeScript — это надстройка над JavaScript, и все методы JS работают. Главное — следить за типами и выбирать способ, который делает код понятным и безопасным.
Ответов пока нет.
Войдите чтобы оставить ответ