Шаблонные строки¶
Синтаксически это строки, в которых используются обратные кавычки (`) вместо одинарных ( ') или двойных ("). Существует три причины для использования шаблонных литералов:
- строковая интерполяция
- многострочные литералы
- теговые шаблоны
Строковая интерполяция¶
Распространенный вариант использования, когда вы хотите сгенерировать строку из литералов и переменных. Для этого вам понадобится некоторая шаблонизация, и это то, откуда шаблонные строки изначально получили свое имя. С тех пор они были официально переименованы в шаблонные литералы. Вот как вы могли бы сгенерировать 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!). Теговые шаблоны позволяют создавать мощные строковые утилиты.