Learn TypeScript
Using the never type
Using the never type
In this lesson, we'll learn about the never type and how it is different from the void type.
How never is different from void
We are going to explore the never type in the exercise below.
The code contains an infinite loop where a message is output to the console.
What is the return type of the keepLogging function?
Why isn't the return type void?
Use cases for never
Let's look at a different example where the never type is useful.
- Copy and paste the following code into the editor:
1type Status = "Pending" | "Working" | "Complete";23function doSomeAction(status: Status) {4 switch (status) {5 case "Pending":6 // some code7 break;8 case "Working":9 // some code10 break;11 case "Complete":12 // some code13 break;14 }15}1617doSomeAction("Pending");We haven't covered the syntax on line 1 yet. This creates a string type that can hold "Pending", "Working", or "Complete". Don't worry if this doesn't make sense because we will cover it in detail later in the course.
The code also contains a function containing a switch statement that does different things depending on the different values for the status parameter.
- Let's add a new cancelled status:
type Status = "Pending" | "Working" | "Complete" | "Cancelled";Wouldn't it be nice if TypeScript reminded us that we need to handle this new status in the doSomeAction function switch statement? Well, we can use the never type to do this.
- Add the following the function:
function neverReached(never: never) {}This function takes in a parameter of type never. So, it's a function that, in theory, should never be reached in the code.
How can we use the neverReached function in a default branch of the switch statement in doSomeAction?
Notice that we now get a type error in the default branch of the switch statement.
- Implement the cancelled switch statement branch:
case "Cancelled": // some code break;The type error will disappear.
Neat!
Summary
The never type is used to represent a type of value that will never occur. It is useful to explicitly flag areas of code that shouldn’t be reached. It is also useful when creating conditional types, which we will learn about later in this course.
Further information about the never type can be found in the TypeScript handbook.
In the next lesson, we’ll learn about a type that we can use as an alternative to any.
