Bird
Raised Fist0
Typescriptprogramming~20 mins

Pattern matching with template literals in Typescript - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Template Literal Pattern Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of pattern matching with template literals
What is the output of this TypeScript code using pattern matching with template literals?
Typescript
const input = "user_123";

const match = input.match(/^user_(\d+)$/);

console.log(match ? `ID: ${match[1]}` : "No match");
AID: 123
BNo match
CID: user_123
DSyntaxError
Attempts:
2 left
💡 Hint
Look at the regular expression and what part is captured.
❓ Predict Output
intermediate
2:00remaining
Extracting parts with template literal types
What will be the output of this TypeScript code using template literal types and pattern matching?
Typescript
type EventName = `on${string}Click`;

function handleEvent(event: EventName) {
  if (event.startsWith("on") && event.endsWith("Click")) {
    console.log(`Handled event: ${event}`);
  } else {
    console.log("Unknown event");
  }
}

handleEvent("onButtonClick");
AHandled event: ButtonClick
BUnknown event
CHandled event: onButtonClick
DTypeError
Attempts:
2 left
💡 Hint
Check the string passed and the conditions in the function.
🔧 Debug
advanced
2:30remaining
Why does this pattern matching fail?
This TypeScript code tries to extract a version number from a string using template literal types but fails. What is the cause?
Typescript
type VersionString = `v${number}`;

function parseVersion(v: string) {
  if (v.match(/^v\d+$/)) {
    const version: VersionString = v;
    return version;
  }
  return "Invalid version";
}

console.log(parseVersion("v2"));
AType 'string' is not assignable to type 'VersionString' without assertion
BRegex pattern is incorrect and does not match 'v2'
CFunction returns undefined instead of string
DSyntax error in template literal type
Attempts:
2 left
💡 Hint
Check the type assignment inside the if block.
📝 Syntax
advanced
1:30remaining
Identify the syntax error in template literal pattern matching
Which option contains a syntax error in TypeScript template literal pattern matching?
Atype File = `${string}.txt`;
Btype Greeting = `Hello, ${string}`;
Ctype Path = `/home/${string}`;
Dtype Invalid = `${number`;
Attempts:
2 left
💡 Hint
Look carefully at the backticks and braces.
🚀 Application
expert
3:00remaining
Count how many strings match this template literal type
Given the type `type Code = `ERR_${number}_${string}`;` and the array below, how many strings match the `Code` type pattern?
Typescript
type Code = `ERR_${number}_${string}`;

const codes = [
  "ERR_404_NotFound",
  "ERR_500_ServerError",
  "WARN_300_SlowResponse",
  "ERR_abc_Invalid",
  "ERR_123_",
  "ERR_0_ZeroError"
];
A3
B4
C5
D2
Attempts:
2 left
💡 Hint
Check which strings start with 'ERR_', followed by a number, then an underscore and any string.

Practice

(1/5)
1. What does pattern matching with template literals in TypeScript primarily help you do?
easy
A. Create new variables dynamically
B. Automatically generate functions from strings
C. Change the type of a variable at runtime
D. Check if a string fits a specific shape or format

Solution

  1. Step 1: Understand the purpose of pattern matching

    Pattern matching with template literals is used to verify if strings follow a certain pattern or format.
  2. Step 2: Relate to template literals usage

    Template literals allow embedding expressions and patterns to check string shapes easily.
  3. Final Answer:

    Check if a string fits a specific shape or format -> Option D
  4. Quick Check:

    Pattern matching = Check string shape [OK]
Hint: Pattern matching checks string shapes, not variable types [OK]
Common Mistakes:
  • Confusing pattern matching with variable creation
  • Thinking it changes variable types
  • Assuming it generates functions automatically
2. Which of the following is the correct syntax to use a template literal pattern in a TypeScript type check?
easy
A. type ID = `${string}-${number}`;
B. type ID = '${string}-${number}';
C. ;`}rebmun{$-}gnirts{$` = DI epyt
D. type ID = `${string}-${number}`

Solution

  1. Step 1: Identify correct template literal syntax

    Template literals use backticks (`) and embed types inside ${} without quotes.
  2. Step 2: Check for correct punctuation

    type ID = `${string}-${number}`; correctly uses backticks and ${} with no extra quotes.
  3. Final Answer:

    type ID = `${string}-${number}`; -> Option A
  4. Quick Check:

    Backticks + ${} = correct syntax [OK]
Hint: Use backticks and ${} without quotes for template types [OK]
Common Mistakes:
  • Using single or double quotes instead of backticks
  • Putting quotes inside ${} expressions
  • Missing backticks around the pattern
3. What will be the result of this TypeScript code snippet?
type Email = `${string}@${string}.com`;

function isEmail(value: string): value is Email {
  return /.+@.+\.com$/.test(value);
}

console.log(isEmail('user@example.com'));
console.log(isEmail('user@example.org'));
medium
A. true\ntrue
B. false\ntrue
C. true\nfalse
D. false\nfalse

Solution

  1. Step 1: Understand the Email type pattern

    The Email type expects strings like 'something@something.com'.
  2. Step 2: Analyze the isEmail function

    The regex checks if the string ends with '.com' after an '@' symbol.
  3. Step 3: Check the console.log outputs

    'user@example.com' matches the regex, so true; 'user@example.org' does not, so false.
  4. Final Answer:

    true false -> Option C
  5. Quick Check:

    Regex matches .com only = true, false [OK]
Hint: Regex matches only .com emails, others return false [OK]
Common Mistakes:
  • Assuming .org matches .com pattern
  • Ignoring regex anchors
  • Confusing true/false order in output
4. Identify the error in this TypeScript code using template literal pattern matching:
type Phone = `${number}-${number}-${number}`;

function isPhone(value: string): value is Phone {
  return /^\d{3}-\d{3}-\d{4}$/.test(value);
}
medium
A. The Phone type pattern does not match the regex format
B. The regex pattern is missing anchors
C. Template literals cannot use number types inside ${}
D. The function should return a boolean, not a type predicate

Solution

  1. Step 1: Compare Phone type and regex pattern

    Phone type expects three numbers separated by dashes, but each ${number} matches any number, not fixed digits.
  2. Step 2: Check regex pattern details

    The regex expects exactly 3 digits, then 3 digits, then 4 digits, which doesn't align with the Phone type's generic number placeholders.
  3. Final Answer:

    The Phone type pattern does not match the regex format -> Option A
  4. Quick Check:

    Type pattern and regex must align [OK]
Hint: Match template literal types exactly with regex patterns [OK]
Common Mistakes:
  • Assuming ${number} matches fixed digit counts
  • Ignoring regex anchors (though present here)
  • Confusing return type of type predicate functions
5. Given this TypeScript code, what will be the output?
type UserID = `user_${number}`;

function parseUserID(id: string): UserID | null {
  if (id.match(/^user_\d+$/)) {
    return id as UserID;
  }
  return null;
}

console.log(parseUserID('user_123'));
console.log(parseUserID('admin_123'));
hard
A. null\nnull
B. 'user_123'\nnull
C. 'user_123'\n'user_123'
D. null\n'user_123'

Solution

  1. Step 1: Understand UserID type pattern

    UserID must start with 'user_' followed by a number.
  2. Step 2: Analyze parseUserID function

    The function returns the id cast as UserID if it matches the regex /^user_\d+$/, else returns null.
  3. Step 3: Evaluate console.log outputs

    'user_123' matches regex, so returns 'user_123'; 'admin_123' does not, so returns null.
  4. Final Answer:

    'user_123' null -> Option B
  5. Quick Check:

    Regex match returns id, else null [OK]
Hint: Regex match controls return; unmatched returns null [OK]
Common Mistakes:
  • Assuming 'admin_123' matches user pattern
  • Confusing return types with casting
  • Ignoring regex anchors and pattern
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard