Avatar ·

Как сделать интерполяцию строк в TypeScript? Шаблонные строки

Всем привет! Я только начал изучать TypeScript после JavaScript и столкнулся с проблемой. Мне нужно объединить несколько переменных в одну строку для вывода сообщения пользователю. В JavaScript я обычно делал так: ```typescript let name = "Алексей"; let age = 25; let message = "Привет, меня зовут " + name + " и мне " + age + " лет."; console.log(message); ``` Но это выглядит громоздко, особенно когда переменных много. Я слышал, что в ES6 появились шаблонные строки с обратными кавычками и ${}, но не уверен, работают ли они в TypeScript. Когда я пробую написать: ```typescript let message = `Привет, меня зовут ${name} и мне ${age} лет.`; ``` TypeScript выдаёт ошибку или нет? Нужно ли что-то дополнительно настраивать в tsconfig.json? И можно ли внутри интерполяции выполнять выражения, например, вычисления или вызовы функций? Подскажите, пожалуйста, как правильно делать интерполяцию строк в TypeScript, чтобы код был чистым и современным. Заранее спасибо! <<>>

Использование шаблонных строк (template literals) в TypeScript

Да, вы абсолютно правы — в TypeScript (как и в современном JavaScript ES6+) для интерполяции строк используются шаблонные строки (template literals). Они работают "из коробки" и не требуют никаких дополнительных настроек компилятора. Ваш пример с обратными кавычками и ${} является правильным и будет работать без ошибок.

Основной синтаксис

Шаблонные строки заключаются в обратные кавычки (backticks) — символ ` (на русской клавиатуре обычно находится на одной клавише с буквой Ё). Внутри них можно вставлять любые выражения JavaScript/TypeScript с помощью синтаксиса ${выражение}.

let name: string = "Алексей";
let age: number = 25;

// Базовая интерполяция
let message: string = `Привет, меня зовут ${name} и мне ${age} лет.`;
console.log(message); // "Привет, меня зовут Алексей и мне 25 лет."

Выполнение выражений внутри интерполяции

Внутри ${} можно выполнять любые выражения: математические операции, вызовы функций, тернарные операторы и даже другие шаблонные строки.

let a: number = 10;
let b: number = 5;

// Математические операции
console.log(`Сумма: ${a + b}`); // "Сумма: 15"
console.log(`Произведение: ${a * b}`); // "Произведение: 50"

// Вызов функций
function getGreeting(name: string): string {
    return `Добро пожаловать, ${name}!`;
}
let userName: string = "Мария";
console.log(`${getGreeting(userName)}`); // "Добро пожаловать, Мария!"

// Тернарный оператор
let isAdmin: boolean = true;
console.log(`Роль: ${isAdmin ? 'Администратор' : 'Пользователь'}`); // "Роль: Администратор"

// Вложенные шаблонные строки
let city: string = "Москва";
let country: string = "Россия";
console.log(`Город: ${`${city}, ${country}`}`); // "Город: Москва, Россия"

Многострочные строки

Шаблонные строки также позволяют создавать многострочный текст без использования символа \n:

let multiLine: string = `Это первая строка.
Это вторая строка.
А это третья.`;

console.log(multiLine);
/* Вывод:
Это первая строка.
Это вторая строка.
А это третья.
*/

Типизация и TypeScript

TypeScript автоматически определяет тип результата интерполяции как string. Если вы используете переменные разных типов, они будут преобразованы в строку:

let id: number = 123;
let active: boolean = true;
let data: object = { key: "value" };

console.log(`ID: ${id}, Active: ${active}, Data: ${JSON.stringify(data)}`);
// "ID: 123, Active: true, Data: {"key":"value"}"

Практические советы

  • Избегайте сложной логики внутри интерполяции — если выражение становится слишком длинным, лучше вынести его в отдельную переменную или функцию.
  • Используйте для форматирования — шаблонные строки идеально подходят для создания сообщений, SQL-запросов, HTML-шаблонов и URL.
  • Экранирование обратных кавычек — если нужно вывести сам символ обратной кавычки, используйте обратный слеш: \`.
  • Производительность — в современных движках JavaScript шаблонные строки работают так же быстро, как и конкатенация, а часто даже быстрее.

Заключение

Интерполяция строк через шаблонные строки — это стандартный и рекомендуемый способ в TypeScript. Он делает код более читаемым, лаконичным и менее подверженным ошибкам по сравнению с конкатенацией через +. Начинайте использовать обратные кавычки везде, где нужно объединять строки с переменными — это современный стандарт.

<<>>

Альтернативный подход: функция-форматировщик

Если вы работаете в проекте, где по каким-то причинам нельзя использовать шаблонные строки (например, нужно поддерживать очень старые версии JavaScript без транспиляции), или вам нужна более сложная логика форматирования, можно создать свою функцию для интерполяции.

function interpolate(template: string, ...args: any[]): string {
    return template.replace(/\{(\d+)\}/g, (match, index) => {
        return typeof args[index] !== 'undefined' ? args[index] : match;
    });
}

let name = "Ольга";
let age = 30;
let message = interpolate("Привет, {0}! Тебе {1} лет.", name, age);
console.log(message); // "Привет, Ольга! Тебе 30 лет."

Этот подход использует плейсхолдеры {0}, {1} и т.д., которые заменяются переданными аргументами. Он удобен, если шаблон строки хранится отдельно от данных (например, в файле локализации).

Однако, для 99% случаев в TypeScript лучше использовать нативные шаблонные строки — они быстрее, безопаснее по типам и поддерживаются всеми современными средами. Функция-форматировщик — это решение для специфических ситуаций, когда нужна кастомная логика замены.