How to declare a function throws an error in TypeScript

In programming, handling errors is a common necessity to maintain code integrity.

It is the responsibility of a programmer to handle errors effectively, ensuring clean code and preventing the premature termination of an application.

While TypeScript’s compiler aids in catching compile-time errors with its type safety features, handling runtime errors requires a different approach.

How can you manage runtime errors in TypeScript?

TypeScript provides an Error object to signify the occurrence of an error during runtime.

In TypeScript, the Error object represents a runtime exception or error. Additionally, TypeScript supports the never type, which accommodates any type of data.

In TypeScript, error handling is typically done using the try and catch blocks:

try {
  throw new Error("An error occurred.");
} catch (e) {
  console.log(e.message);
}

How do you declare a function that throws an Error?

Unlike some other programming languages, declaring a function explicitly as throwing an error is not directly supported in TypeScript.

With the current version of TypeScript (4.3.x), the following syntax is invalid:

function myFunction(param: string): throws Error {

}

Instead, you can achieve similar functionality using the never type and the union operator:

function myFunction(test: string): string | never {
  if (!test) {
    throw new Error("Test failed.");
  }
  return test;
}

The above function has the potential to throw an error or return a string. You can combine the never type with other types like boolean or number using the union pipe operator.