When to Use ‘never’ vs ‘void’ in Your TypeScript Functions

Sebastian Ścigała
Ragnarson
Published in
2 min readAug 22, 2023

When working with TypeScript, developers may come across the terms “never” and “void” while defining function return types. Both types signify the absence of a return value, but subtle differences exist between them.

“Void” is a type that represents the absence of a value returned by a function. It means that the function will execute but not return any data. It is useful when we want to perform some side-effect, like logging a message or updating a database, without returning any data.

On the other hand, “never” is a type that represents a function that will never return. It means the function will throw an error or enter into an infinite loop. It is useful when we want to signal that a function will never complete normally.

Consider the following examples:

In the example above, logMessage is a function that logs a message to the console and returns nothing, so its return type is void. throwError is a function that throws an error, so its return type is never. Finally, infiniteLoop is a function that enters into an infinite loop and never returns, so its return type is also never.

In summary, “void” is used when a function performs a side-effect and does not return any data, while “never” is used when a function will never complete normally. Understanding the differences between these types is important to use them correctly in your TypeScript code.

--

--