Bird
Raised Fist0
Typescriptprogramming~15 mins

Pattern matching with template literals in Typescript - Mini Project: Build & Apply

Choose your learning style10 modes available
Pattern Matching with Template Literals in TypeScript
📋 What You'll Learn
💡 Why This Matters
🌍 Real World
Pattern matching with template literals helps in validating codes, IDs, or formatted strings in many applications like form validation or data filtering.
💼 Career
Understanding pattern matching and template literals is useful for frontend and backend developers to handle string data efficiently and write clean, readable code.
Progress0 / 4 steps
1
Create the array of strings
Create an array called codes with these exact string values: 'abc123', 'xyz789', 'abc456', 'def123', 'abc789'.
Typescript
Hint

Use square brackets [] to create an array and separate strings with commas.

2
Create the pattern string with template literals
Create a constant string called pattern using template literals that matches strings starting with 'abc' and ending with any three digits. Use the template literal syntax with backticks and a placeholder for the digits as ${'\d\d\d'}.
Typescript
Hint

Use backticks ` to create a template literal. Use ${} to insert a pattern for three digits as a string.

3
Filter strings matching the pattern
Create a new array called matchingCodes by filtering codes. Use the filter method with a function that uses a regular expression to test if each code matches the pattern ^abc\d{3}$. Use the exact variable names matchingCodes and codes.
Typescript
Hint

Use filter with a function that returns true if the code matches the regex /^abc\d{3}$/.

4
Print the matching codes
Use console.log to print the matchingCodes array.
Typescript
Hint

Use console.log(matchingCodes); to show the filtered array.

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