What are tagged templates in JavaScript?
The short answer
Tagged templates let you process template literal strings with a function. Instead of just interpolating values, the function receives the string parts and the values separately, giving you full control over how the final string is built. Libraries like styled-components and GraphQL's gql use tagged templates.
How they work
A tagged template is a function call where the argument is a template literal:
function highlight(strings, ...values) {return strings.reduce((result, str, i) => {return (result +str +(values[i] !== undefined? `<mark>${values[i]}</mark>`: ''));}, '');}const name = 'John';const age = 30;highlight`My name is ${name} and I am ${age} years old`;// "My name is <mark>John</mark> and I am <mark>30</mark> years old"
The function receives:
strings— an array of the static parts:["My name is ", " and I am ", " years old"]...values— the interpolated values:["John", 30]
Real-world examples
styled-components:
const Button = styled.button`background: ${(props) =>props.primary ? 'blue' : 'white'};color: ${(props) => (props.primary ? 'white' : 'blue')};padding: 8px 16px;`;
The styled.button tag function processes the CSS template, injects the dynamic values, and creates a React component.
GraphQL queries:
const GET_USER = gql`query GetUser($id: ID!) {user(id: $id) {name}}`;
The gql tag function parses the GraphQL query string into an AST (Abstract Syntax Tree) that the GraphQL client can use.
HTML escaping for security:
function safeHtml(strings, ...values) {const escape = (str) =>String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');return strings.reduce((result, str, i) => {return (result +str +(values[i] !== undefined ? escape(values[i]) : ''));}, '');}const userInput = '<script>alert("xss")</script>';safeHtml`<p>${userInput}</p>`;// "<p><script>alert("xss")</script></p>"
Interview Tip
Show the basic mechanism (function receives strings array and values), then give a real-world example like styled-components or HTML escaping. The key insight is that tagged templates give you control over how interpolated values are processed, which is useful for security (escaping) and DSLs (CSS-in-JS, GraphQL).
Why interviewers ask this
This is an advanced JavaScript feature that many developers use (styled-components, GraphQL) without understanding how it works. Interviewers ask about it to see if you understand the underlying mechanism behind popular libraries.