Discover how a simple function can make your code smarter and safer by telling TypeScript exactly what it's working with!
Why Type predicates in practice in Typescript? - Purpose & Use Cases
Imagine you have a list of different shapes, like circles and squares, and you want to find out which ones are circles by checking their properties manually.
Manually checking each shape's properties every time is slow and easy to mess up. You might forget a check or mix up types, causing bugs that are hard to find.
Type predicates let you create clear, reusable checks that tell TypeScript exactly what type an object is. This helps catch mistakes early and makes your code easier to read and maintain.
function isCircle(shape: any) { return shape.radius !== undefined; }
if (isCircle(shape)) { console.log(shape.radius); }function isCircle(shape: unknown): shape is Circle { return (shape as Circle).radius !== undefined; }
if (isCircle(shape)) { console.log(shape.radius); }It enables safer and clearer code by letting TypeScript know the exact type after a check, reducing errors and improving developer confidence.
When building a drawing app, you can use type predicates to safely handle different shapes and their unique properties without risking runtime errors.
Manual type checks are error-prone and repetitive.
Type predicates provide a clear way to tell TypeScript about types after checks.
This leads to safer, cleaner, and more maintainable code.
Practice
What is the main purpose of a type predicate function in TypeScript?
Solution
Step 1: Understand what a type predicate does
A type predicate function returns a boolean and tells TypeScript the type of a variable when true.Step 2: Identify the correct purpose
It helps TypeScript narrow down types safely after a check, not convert or declare types.Final Answer:
To tell TypeScript the specific type of a variable after a check -> Option BQuick Check:
Type predicate = type narrowing [OK]
- Thinking type predicates convert types
- Confusing type predicates with type aliases
- Assuming type predicates throw errors
Which of the following is the correct syntax for a type predicate function that checks if a value is a string?
function isString(value: unknown): ??? {
return typeof value === 'string';
}Solution
Step 1: Recall type predicate syntax
A type predicate function returns a boolean and uses the syntaxparamName is Typein the return type.Step 2: Match the syntax to the example
The function returns true ifvalueis a string, so the return type isvalue is string.Final Answer:
value is string -> Option DQuick Check:
Type predicate syntax = param is Type [OK]
- Using just 'boolean' as return type
- Writing 'value: string' instead of 'value is string'
- Returning 'string' as type predicate
What will be the output of this TypeScript code?
function isNumber(value: unknown): value is number {
return typeof value === 'number';
}
const data: unknown[] = [1, 'two', 3];
const numbers = data.filter(isNumber);
console.log(numbers);Solution
Step 1: Understand the filter with type predicate
TheisNumberfunction returns true only for numbers, sofilterkeeps only numbers.Step 2: Apply filter to the array
From[1, 'two', 3], only 1 and 3 pass the check, sonumbersis[1, 3].Final Answer:
[1, 3] -> Option AQuick Check:
Filter with type predicate keeps matching types [OK]
- Assuming filter returns original array
- Thinking it returns only strings
- Confusing type predicate with type casting
Identify the error in this type predicate function and choose the fix:
function isBoolean(value: unknown): boolean {
return typeof value === 'boolean';
}Solution
Step 1: Check the return type for type predicate
The function returns a boolean but does not use the type predicate syntaxvalue is boolean.Step 2: Fix the return type
To inform TypeScript about the type, the return type must bevalue is boolean, not justboolean.Final Answer:
Change return type to value is boolean -> Option AQuick Check:
Type predicate needs 'param is Type' return type [OK]
- Using plain boolean as return type
- Adding unnecessary casts
- Assuming no fix needed
Given this code, what is the best way to safely extract all strings from a mixed array using a type predicate?
type Mixed = (string | number | boolean)[];
function isString(value: unknown): value is string {
return typeof value === 'string';
}
const mixedArray: Mixed = ['hello', 42, true, 'world'];
// What code extracts only strings safely?
Solution
Step 1: Understand the goal
We want to get only strings from a mixed array safely, with TypeScript knowing the type.Step 2: Use type predicate in filter
Usingfilter(isString)uses the type predicate to narrow type safely, sostringsis typed asstring[].Step 3: Compare other options
const strings = mixedArray.filter(x => typeof x === 'string'); also works and does narrow type for TypeScript, but does not use the provided type predicate function. const strings = mixedArray.filter(x => x instanceof String); is incorrect becauseinstanceof Stringchecks object wrappers, not primitives. const strings = mixedArray.map(x => x as string); casts all elements to string unsafely.Final Answer:
const strings = mixedArray.filter(isString); -> Option CQuick Check:
Use type predicate function in filter for safe extraction [OK]
- Using instanceof String instead of typeof
- Casting all elements without filtering
- Not using type predicate for type safety
Ready to prove it?
Pass the test and this pattern moves unknown
