never
is a data type of values that will never happen. We use never
in a function that will never reach the end of that function or when narrowing a type that will never return any data type. never
can be assigned to any type available in TypeScript. It is also considered a subtype of all the types in TypeScript.
Examples
A function where never
is implicitly dervied
function genericError() {
return new Error("Oops! Something is wrong");
}
A function where it will never reach the end of that function, hence never
is the return type
function someError(errorMessage: string): never {
throw new Error(errorMessage);
//Some more logic
}
Having never
as an implicit return type through type narrowing
function determineType(param: number | T[]) {
if (typeof param === 'number') {
return param;
}else if(Array.isArray(param)) {
return param;
}
}
In the function if the value of param
is neither of type number
or an array of type any
, the type by default will be of type never
.
Difference between never
and void
The difference between never
and void
is that void
can have as values null
or undefined
, but never
is not allowed to have a value.
let a: void = null;
let b: never = null; //Type 'null' is not assignable to type 'never'.