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'.