Is it acceptable to have a union type with a number and never combined?

Examples will never be of a function that always throws an error or one containing an infinite loop.

Never means never, it simply does not happen.

But throwing an error is not just void or undefined, it falls under the category of never

So can we not utilize never in a union? It may sound illogical at first glance, but upon further reflection, it makes sense. Ultimately, it provides precise context, doesn't it?

foo(input: string): number | never {
    if (input === 'bazz') {
        return 5;
    }
    throw new Error('could not do it');
}

Answer №1

The Pull Request that introduced the concept of never clearly explains how T | never always simplifies to just T:

Since never is considered a subtype of all types, it will be automatically excluded from union types and won't play a role in function return type deduction if there are other possible return types present.

never should only be used as a return type when a function is meant to never return any value. Unlike Java's throws, TypeScript does not have an equivalent way to represent this behavior.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Achieving a clean/reset for a fetch using SSR in Next 13

Is there a way to update the user variable in the validateToken fetch if a user signs out later on, such as within a nested component like Navigation? What is the best approach to handle clearing or setting the user variable? Snippet from Layout.tsx: impo ...

What are the best practices for testing a class function that executes a mongoose query?

Within my class, there are multiple class functions, with one specifically executing a mongoose query. The structure is similar to: export class ExampleService { constructor( @InjectModel(Example.name) private exampleModel: Model<Example>, ...

"Inquiry on Python's general syntax: transitioning from a statically typed language to a dynamically typed one

I'm diving into the world of Python and have a question regarding Python syntax. I'm transitioning from theory to practice and looking to translate a TypeScript class into Python. class Category { id: number; type: 'shop'|' ...

From URLSearchParams to HttpParams: A Guide for Angular HttpClient

Facing an issue while updating from Http to HttpClient in a service.ts file on Angular8. I've made the necessary changes from Http and Headers to HttpClient and HttpHeaders, as well as removed '.pipe(map((response) => response.json().response ...

Choose a specific div element from a collection of dynamically generated divs in Angular

I have been working on a code to dynamically generate div elements using the *ngFor directive. Here is what I have so far: <div *ngFor = "let item of Items"> <p>Item : {{item}} </p> </div> The challenge I encountered is that w ...

Is it possible to prevent casting to any by improving type definitions?

My query can be best elucidated with the following code snippet. The comments within the code aim to provide clarity on the nature of the question. type MediaFormats = "video" | "audio"; type IMediaContent<TType extends MediaFormats, TValue> = { ...

What measures can be taken to avoid duplicating a string literal that serves as both a data type and a dynamic variable?

The EventBridgeEvent interface in the "@types/aws-lambda" package is defined as: export interface EventBridgeEvent<TDetailType extends string, TDetail> It's worth noting that TDetailType extends the string type. An interesting aspect ...

The Typescript Select is displaying an incorrect value

Here's the code snippet I've been working with: <select #C (change)="changeSelect(zone.id, C.value)"> <option *ngFor="let town of townsLocal" [attr.value]="town.data" [attr.selected]="town.data === zone.town && 'selected& ...

Encountering an error stating "Potential null object" while attempting to retrieve the total count of characters and numbers in a given string

Currently, I am trying to find the number of characters and digits that repeat more than once in a given input string. For example, if the input is "zzrrcde", the output should be 2 as both z and r occur more than once. Here is the function I have writte ...

Generate a Swagger file effortlessly for your Node.js application

Currently, I am working on a Node Express RESTful API built with TypeScript. I would like to know if there is a tool available that can generate a Swagger file automatically for my project based on the source code. Thank you! ...

Ionic 2 has now expanded its functionality to include desktop support. Can this mean that a single codebase will work

Yesterday, I came across this information in my email. Exciting news: Ionic is now Desktop Ready! Build apps that can seamlessly transition from smartphones to large desktop displays with Grid and Split Panel functionalities. After dedicated work adding s ...

Dynamic module declaration - Typescript 3.5

In TypeScript, I am able to declare a module like this: declare module '*.svg' { const content: string export default content } After declaring the module, I can import it using import svg from './src/file.svg' without encount ...

What is the best way to define a general class within the constructor of another class in TypeScript?

Is there a way to inject a subclass into a class during its constructor using TypeScript? I've tried to demonstrate my idea with some pseudo-code here: type GenericConstructor<T> = { new (): T; } class MyClass { constructor( SubClass: G ...

Utilize the object's ID to filter and display data based on specified criteria

I retrieved an array of objects from a database and am seeking to narrow down the results based on specific criteria. For instance, I want to display results only if a user's id matches the page's correct id. TS - async getResultsForId() { ...

Prior to the loading of the AppModule in Angular, make sure to load

Consider the following situation (Angular v7): Retrieve configuration settings (API server URL and Auth server URL) from an external source (JSON), prior to loading the AppModule Provide configuration to the AppModule (OAuth2 module) Compile the applicat ...

Using useRef with Typescript/Formik - a practical guide

Encountering Typescript errors while passing a ref property into my custom FieldInput for Formik validation. Specifically, in the function: const handleSubmitForm = ( values: FormValues, helpers: FormikHelpers<FormValues>, ) => { ...

Windows Angular experienced a failure during allocation as the mark-compacts near heap limit were ineffective

Encountering an error in my Angular application on Windows10 when using ng build --prod, but it works fine with ng build. The issue seems to arise from the presence of 4 JSON files in the assets folder, with one file being 21 MB and the others ranging fro ...

Can anyone help me with coloring Devanagiri diacritics in ReactJS?

I am currently working on a ReactJS project and I have come across an issue. I would like for the diacritic of a Devanagiri letter to be displayed in a different color than the letter it is attached to. For example: क + ी make की I was wondering ...

Differences in the treatment of Map objects by Angular TypeScript and JavaScript

Here is an example of an interface I have defined: export interface Parameter { access: string; value: string; } export interface Parameters { parameter: Map<string, Parameter>; } In my code, I am trying to use the above interface like thi ...

Guidelines on utilizing map varieties for creating a type definition for `Object.keys`

Exploring a stricter definition of the Object.keys function using mapped types in TypeScript. An Illustrative Example: To begin, consider an object defined using const: const myObj = { a: 'some value', b: 5 }; Typically, when utilizing Ob ...