Template literal types let you create new string types by combining other string types. This helps catch mistakes early and makes your code smarter.
Why template literal types are powerful in Typescript
type NewType = `${stringPart1}${stringPart2}`;You use backticks (`) to create template literal types, similar to JavaScript template strings.
Inside the backticks, you can insert other types using ${}.
type Greeting = `Hello, ${string}!`;type EventName = `${'click' | 'hover'}Event`;type CssClass = `btn-${'primary' | 'secondary'}`;This program defines a type Message that must start with 'Status: ' followed by one of the allowed statuses. The function showMessage only accepts those strings. If you try to pass a wrong string, TypeScript will show an error before running.
type Status = 'success' | 'error' | 'loading'; type Message = `Status: ${Status}`; function showMessage(msg: Message) { console.log(msg); } showMessage('Status: success'); // showMessage('Status: done'); // Error: Argument of type '"Status: done"' is not assignable to parameter of type 'Message'.
Template literal types help catch errors before running your code.
You can combine them with unions to create many string options easily.
They work only at compile time and do not affect the JavaScript output.
Template literal types build new string types by combining others.
They help TypeScript check string formats and catch mistakes early.
They make your code safer and easier to understand.
Practice
template literal types in TypeScript?Solution
Step 1: Understand template literal types purpose
Template literal types combine string types to form new string types at compile time.Step 2: Compare options with this purpose
Only They allow creating new string types by combining existing ones. correctly describes this benefit; others describe runtime behavior or incorrect features.Final Answer:
They allow creating new string types by combining existing ones. -> Option AQuick Check:
Template literal types build new string types = A [OK]
- Confusing template literal types with runtime string concatenation
- Thinking they disable type checking
- Assuming they convert strings to numbers
'hello' and a variable T?Solution
Step 1: Recall template literal type syntax
Template literal types use backticks with placeholders like${T}inside, no plus signs.Step 2: Check each option's syntax
type Greet = `hello${T}`; correctly uses backticks and${T}without extra symbols; others have syntax errors.Final Answer:
type Greet = `hello${T}`; -> Option DQuick Check:
Correct template literal syntax uses backticks and ${} = A [OK]
- Using plus signs inside template literal types
- Omitting backticks
- Not wrapping variable in ${}
type Name = 'Alice' | 'Bob';
type Greeting = `Hello, ${Name}!`;Solution
Step 1: Understand union substitution in template literal types
The union'Alice' | 'Bob'substitutes into the template, creating a union of strings.Step 2: Form the combined type
Resulting type is`Hello, Alice!` | `Hello, Bob!`, combining each union member with the template.Final Answer:
`Hello, Alice!` | `Hello, Bob!` -> Option CQuick Check:
Union expands inside template literals = D [OK]
- Thinking the union stays as a single string with ${Name}
- Ignoring union expansion
- Confusing template literal type with runtime string
type Status = 'success' | 'error';
type Message = `Status: ${Status}`;
const msg: Message = 'Status: fail';Solution
Step 1: Check allowed values for Message type
Message type expands to 'Status: success' | 'Status: error' only.Step 2: Validate assigned value
Assigned string 'Status: fail' is not part of the allowed union, causing a type error.Final Answer:
Assigning 'Status: fail' is invalid because 'fail' is not in Status union. -> Option BQuick Check:
Assigned string must match template literal union = B [OK]
- Assuming any string fits template literal type
- Thinking unions can't be used in template literals
- Ignoring type mismatch errors
type Event = 'click' | 'hover';
type Element = 'button' | 'link';
type EventName = `${Element}_${Event}`;Which of the following is NOT assignable to a variable of type
EventName?Solution
Step 1: Understand EventName type combinations
EventName combines Element and Event with underscore, so valid values are 'button_click', 'button_hover', 'link_click', 'link_hover'.Step 2: Identify invalid assignment
'button_focus' is invalid because 'focus' is not in Event union.Final Answer:
'button_focus' -> Option AQuick Check:
Only combinations of Element and Event are valid = C [OK]
- Assuming any string with underscore is valid
- Ignoring union members in template literal types
- Confusing runtime strings with type literals
Ready to prove it?
Pass the test and this pattern moves unknown
