By Microsoft Team

 

Summary: in this tutorial, you will learn about the TypeScript never type that contains no value. 

 

The never type is a type that contains no values. Because of this, you cannot assign any value to a variable with a never type. 

 

Typically, you use the never type to represent the return type of a function that always throws an error. For example:

 

function raiseError(message: string): never {
    throw new Error(message);
}

 

The return type of the following function is inferred to the never type:

 

function reject() { 
   return raiseError('Rejected');
}

 

If you have a function expression that contains an indefinite loop, its return type is also the never type. For example:

 

let loop = function forever() {
    while (true) {
        console.log('Hello');
    }
}

 

In this example, the type of the return type of the forever() function is never. 

 

If you see that the return type of a function is never, then you should ensure that it is not what you intended to do. 

 

Variables can also acquire the never type when you narrow its type by a type guard that can never be true. 

 

For example, without the never type, the following function causes an error because not all code paths return a value.

 

function fn(a: string | number): boolean {
  if (typeof a === "string") {
    return true;
  } else if (typeof a === "number") {
    return false;
  }   
}

 

To make the code valid, you can return a function whose return type is the never type.

 

function fn(a: string | number): boolean {
  if (typeof a === "string") {
    return true;
  } else if (typeof a === "number") {
    return false;
  }  
  // make the function valid
  return neverOccur();
}

let neverOccur = () => {
   throw new Error('Never!');
} 

 

Summary 

 

  • The never type contains no value. 
  • The never type represents the return type of a function that always throws an error or a function that contains an indefinite loop.