Never Type
Last updated
Was this helpful?
Last updated
Was this helpful?
Programming language design does have a concept of bottom type that is a natural outcome as soon as you do code flow analysis. TypeScript does code flow analysis (😎) and so it needs to reliably represent stuff that might never happen.
The never
type is used in TypeScript to denote this bottom type. Cases when it occurs naturally:
A function never returns (e.g. if the function body has while(true){}
)
A function always throws (e.g. in function foo(){throw new Error('Not Implemented')}
the return type of foo
is never
)
Of course you can use this annotation yourself as well
However, only never
can be assigned to another never. e.g.
Great. Now let's just jump into its key use case :)
You can call never functions in a never context.
void
As soon as someone tells you that never
is returned when a function never exits gracefully you intuitively want to think of it as the same as void
. However, void
is a Unit. never
is a falsum.
A function that returns nothing returns a Unit void
. However, a function that never returns (or always throws) returns never
. void
is something that can be assigned (without strictNullChecking
) but never
can never
be assigned to anything other than never
.
And because never
is only assignable to another never
you can use it for compile time exhaustive checks as well. This is covered in the .