Шаблонные строки¶
Синтаксически это строки, в которых используются обратные кавычки (`
) вместо одинарных ( '
) или двойных ("
). Существует три причины для использования шаблонных литералов:
- строковая интерполяция
- многострочные литералы
- теговые шаблоны
Строковая интерполяция¶
Распространенный вариант использования, когда вы хотите сгенерировать строку из литералов и переменных. Для этого вам понадобится некоторая шаблонизация, и это то, откуда шаблонные строки изначально получили свое имя. С тех пор они были официально переименованы в шаблонные литералы. Вот как вы могли бы сгенерировать HTML-строку ранее:
1 2 |
|
Теперь с шаблонными литералами вы можете сделать это проще:
1 2 |
|
Обратите внимание, что любая подстановка внутри интерполяции (${
и }
) определяется как выражение JavaScript и вычисляется, например, вы можете делать некоторые математические расчёты.
1 |
|
Многострочные литералы¶
Когда-нибудь хотели перейти на новую строку в строке JavaScript? Возможно, вы хотели вставить текст песни? Вам нужно было бы экранировать символ переноса строки, используя наш любимый escape-символ \
, а затем вручную перейти на новую строку, начиная с \n
. Как показано ниже:
1 2 3 |
|
С TypeScript вы можете просто использовать шаблонный литерал:
1 2 |
|
Теговые шаблоны¶
Вы можете поместить функцию (называемую тегом) перед шаблонной строкой, и она получит возможность предварительно обработать литералы строки шаблона плюс значения всех выражений подстановок и вернуть результат. Несколько пояснений:
- Все статические литералы передаются в виде массива для первого аргумента.
- Все значения подстановочных выражений передаются как оставшиеся аргументы. Чаще всего вы просто используете параметры rest, чтобы также преобразовать их в массив.
Далее пример, где теговая функция (названная htmlEscape
) экранирует символы в подстановках для обеспечения валидности html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Примечание
Вы можете указать тип placeholder
как []
. Независимо от того, какой тип указан, TypeScript проверяет все подстановки на соответствие типу. Например, если вы собираетесь работать с string
или number
, вы можете указать ...placeholders:(string | number)[]
Сгенерированный JS¶
При компиляции синтаксиса в код до ES6, сгенерированный js выглядит довольно просто. Многострочные строки становятся экранированными. Строковая интерполяция становится конкатенацией строк. Теговые шаблоны становятся вызовами функций.
Заключение¶
Многострочные строки и интерполяция строк - это отличная штука в любом языке. Здорово, что теперь вы можете использовать их в своем JavaScript (спасибо TypeScript!). Теговые шаблоны позволяют создавать мощные строковые утилиты.