На днях я узнал что-то новое о javascript. Обычно мне нравится узнавать что-то новое о javascript. Но на этот раз это было неприятно.

Я работал над кодом, который использовал библиотеку graphql-tag. Graphql-tag - вспомогательная библиотека для GraphQL, языка запросов для API. Но это неважно. Я хочу поговорить о том, как эта библиотека использует свою функцию gql странным образом. Я нашел в коде такое выражение:

gql` {…} `

Я такого раньше не видел. Как это могло быть правдой? Я знал, что gql - это функция, и знал, что эти отметки образуют литерал шаблона. Но почему литерал шаблона не был передан в качестве параметра в круглых скобках? Другими словами, почему это не выглядело так?

gql (`{…}`)

Я не мог понять, почему функция и шаблонный литерал просто сидят рядом друг с другом без скобок, как будто это самая естественная вещь в мире. W.T.F.?

Раздражало то, что я понятия не имел, как искать, почему это правильный код. Мне потребовалось довольно много неудобных поисков в Google, чтобы понять это. Я пробовал такие запросы, как невозможная функция javascript, магический литерал шаблона javascript и невидимая строка gql eval. Я чувствовал себя спам-ботом, задающим глупые вопросы. Полагаю, я мог бы просто опубликовать код переполнение стека и спросить: что здесь происходит?. Но, честно говоря, меня немного смутило то, что я еще не знал .

Конечно, как некоторые из вас, возможно, уже заметили, этот загадочный фрагмент кода на самом деле является чем-то, что называется тегированным литералом шаблона. Оказывается, эта функция была добавлена ​​в javascript несколько лет назад. . Читая документацию, можно заметить, что тег тег - это функция, которая вызывается путем передачи ей литерала шаблона без скобок. Я думал, что догнал все новейшие и лучшие инструменты, которые может предложить javascript, но я, должно быть, пропустил этот. Я всегда был приверженцем изучения основ, поэтому думаю, мне лучше вернуться и прочитать документацию от корки до корки, чтобы увидеть, что еще я пропустил!

Если вы хотите узнать больше о шаблонных литералах с тегами, вот более подробный пост.