TypeScript/JavaScript: ошибка с одинарными кавычками Печать
Добавил(а) microsin   

Долго разбирался с ошибкой TypeScript, которая была связана с неправильными одинарными кавычками.

Вот этот код не работал:

export const API_BASE = "http://localhost:3000/api";
export const API_ROUTES = {
profile: '${API_BASE}/profile' };

А вот этот код работал правильно:

export const API_BASE = "http://localhost:3000/api";
export const API_ROUTES = {
profile: `${API_BASE}/profile` };

На первый взгляд различия найти трудно. Это классическая ошибка с шаблонными строками в JavaScript/TypeScript.

Почему так произошло? Неправильный вариант (с обычными кавычками):

profile: '${API_BASE}/profile'

Что здесь происходит:

- Обычные кавычки `'` или `"` создают обычную строку.
- Внутри обычной строки `${API_BASE}` воспринимается как простой текст.
- JavaScript не выполняет подстановку переменных в обычных строках.
- В результате в `profile` попадает буквально строка: `"${API_BASE}/profile"`

Правильный вариант (с обратными кавычками):

profile: `${API_BASE}/profile`

Что здесь происходит:

- Обратные кавычки `` ` `` создают шаблонную строку (template literal).
- Внутри шаблонной строки `${...}` работает как интерполяция выражений.
- JavaScript подставляет значение переменной `API_BASE`.
- В результате в `profile` попадает: `"http://localhost:3000/api/profile"`

Демонстрация разницы:

const API_BASE = "http://localhost:3000/api";

// Обычные кавычки - нет интерполяции:
const wrong1 = '${API_BASE}/profile'; console.log(wrong1); // "${API_BASE}/profile"

const wrong2 = "${API_BASE}/profile"; console.log(wrong2); // "${API_BASE}/profile"

// Шаблонные строки - есть интерполяция:
const correct = `${API_BASE}/profile`; console.log(correct); // "http://localhost:3000/api/profile"

До исправления:

fetch('${API_BASE}/profile')  // Попытка загрузить: ${API_BASE}/profile
// Фактически: fetch('${API_BASE}/profile')
// Сервер не понимает такой URL и возврает HTML с ошибкой.

После исправления:

fetch('http://localhost:3000/api/profile')  // Правильный URL
// Сервер возвращает правильный ответ, потому что URL корректный.

Как запомнить:

- Обычные кавычки (`'` или `"`) - для простого текста.
- Обратные кавычки (`` ` ``) - для текста с вставками переменных `${...}`.

Это одна из самых частых ошибок при работе с шаблонными строками в JavaScript и TypeScript.