In TypeScript, the 'never' type is a special type that represents values that should never occur. This might seem a little unusual at first, but a deeper dive into the concept should make its utility more apparent.
The never
type – as defined by TypeScript – is a subtype of, and assignable to, every type. However, no type is assignable to never
(except never
itself). In other words, no values can ever be of type never
.
One typical use case for the never
type is in functions that do not return a value. Let’s take a look at an example:
function error(message: string): never {
throw new Error(message);
}
In this example, the function error
does not return a value (it actually throws an error). Therefore, the return type of the function is never
.
Another common use is in infinite loops:
function infiniteLoop(): never {
while (true) {}
}
Here, the infiniteLoop
function doesn't return a value as it's going into an infinite loop. Thus, the return type of this function is also 'never'.
While the never
type is used less frequently than other TypeScript types, it's still crucial to understand it. When combined with the TypeScript type checker, the never
type can help identify areas of your code that may contain logic errors, or aren't behaving as expected.
As a best practice, use the never
type in situations where you want to ensure a specific scenario does not happen. For example, when dealing with discriminated unions (a pattern which helps you create well-defined and distinct state objects), using a never
type in a default case in a switch statement ensures that all potential cases are handled correctly.
Whether you're debugging a complex function or adding extra safety to your TypeScript projects, the never
type serves as a helpful tool to improve readability and robustness of your code.