Signature indicating a requirement to "return a value"

If I have an api that looks like this:

  const execute = (func) => {
       return func();
    };

how can I ensure that the function always returns a value? The only solution that comes to mind is:

type Func = () => !never;
const execute = (func: Func) => func();

however, !never does not exist.

Answer №1

The element that should be excluded is void, which represents the return type of a function that does not return any value.
(never essentially indicates that the function throws an error, and this cannot be excluded)

type voidIsUndefined = void extends undefined ? true : false; // false
type undefinedIsVoid = undefined extends void ? true : false; // true

function doNotAllowVoid<T>(fn: void extends T ? never : (() => T)): T {
  return fn()
}

doNotAllowVoid(() => {}) // error
doNotAllowVoid(() => {
  return;
}) // error, unable to resolve
doNotAllowVoid(() => undefined)
doNotAllowVoid(() => 123)

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

What is the best way to send a JSX Element as a Prop using React and Typescript?

I need help passing an Icon as a Prop to my TextInput Component in this way: export interface TextInputProps { leadingIcon?: (props: React.ComponentProps<'svg'>) => JSX.Element } export const CustomTextField = forwardRef<HTMLInputE ...

Utilizing a generic type with the useReducer hook for an output parameter

I am currently working on developing a custom hook to retrieve data from an API. My main goal is to ensure that the returned data maintains type safety. Is it possible to achieve this using generics? type Action = { type: 'PENDING' } | { type: &a ...

Avoid using `@typescript-eslint/no-floating-promises` when using a `const` function

Can anyone help me understand why the @typescript-eslint/no-floating-promises rule works with some async functions but not all? To my understanding, these two functions should be equivalent: const getUser = async (userId: string): Promise<User> => ...

The form validation feature in Element UI is having issues when used with the Vue 2 Composition API

I am currently developing a form that utilizes element UI's form validation within the vue 2 composition API environment. This form includes a table nested inside, making its structure somewhat complex. ... <div> <el-form ref=" ...

MasterNG - Submitting form details and uploading files with a button press

Our Angular project involves a form with various form fields along with PrimeNG FileUpload, and our goal is to send the form data along with the selected files in one go. Despite researching the documentation and numerous examples online, we couldn't ...

Preventing unnecessary API requests in Angular 9 when using typeahead functionality

Currently, I'm working on integrating a search box feature that needs to trigger an API call when the user enters a value. The goal is to initiate the call after the user stops typing for a certain amount of time. The initial request setup is functio ...

Error during execution: Unhandled promise rejection - ReferenceError: cordova is not recognized

As I work on developing a small app that launches URLs, I encountered some initial errors such as "CANNOT FIND PLATFORM" and a runtime error regarding module not found. Fortunately, with guidance from the Stack Overflow community, I was able to resolve the ...

Exploring the most effective strategies for creating a brand-new type in TypeScript?

In the execution environment I'm working with, there are several global constants that represent different directions: TOP = 1 TOP_RIGHT = 2 RIGHT = 3 BOTTOM_RIGHT = 4 BOTTOM = 5 BOTTOM_LEFT = 6 LEFT = 7 TOP_LEFT = 8 These constants are not just ran ...

Enhancing Code Completion Feature for Multiline Strings in Visual Studio Code

When attempting to include HTML code in a multiline string using backticks within TypeScript, I've noticed that VS Code doesn't offer auto-completion for the HTML tags. Take this example: @Component({ selector: 'app-property-binding&ap ...

Capture and store the current ionic toggle status in real-time to send to the database

I have a list of names from the database that I need to display. Each name should have a toggle button associated with it, and when toggled, the value should be posted back to the database. How can I achieve this functionality in an Ionic application while ...

Using TypeScript to define values with the placeholder "%s" while inputting an object as a parameter

One common way to decorate strings is by using placeholders: let name = "Bob"; console.log("Hello, %s.", name) // => Outputs: "Hello, Bob." I'm curious if there's a way to access specific values within an object being passed in without specif ...

Tips for configuring Visual Studio Code to utilize path mappings for handling automatic imports

In order to streamline my project and avoid messy paths, I am implementing absolute paths that will allow for consistent imports regardless of the file's location in the project tree. For this purpose, I made adjustments to the tsconfig.json: "paths ...

Transforming API response data into a Typescript object using React mapping

When I make an API call, the response data is structured like this: [ { "code": "AF", "name": "Afghanistan" }, { "code": "AX", "name": "Aland Islands" } ...

typescript unconventional syntax for object types

As I was going through the TypeScript handbook, I stumbled upon this example: interface Shape { color: string; } interface Square extends Shape { sideLength: number; } var square = <Square>{}; square.color = "blue"; square.sideLength = 10; ...

What Google Domain Verification APIs are needed for verifying domains in Pub/Sub?

I've written this code that utilizes a Domain token to verify a domain with Google using the Site Verification API: const auth = await this.gcp.getApplicationCredential(accountId, projectId,[ 'https://www.googleapis.com/auth/siteverification ...

Encountering an issue when trying to pass a variable using a constructor

Whenever I run my TypeScript file in Angular, I encounter an error in the console. Error: compiler.js:215 Uncaught Error: Can't resolve all parameters for SearchNameComponent: ([object Object], ?). Below is my complete code: import { Component, O ...

The element automatically receives an 'any' type due to the expression of type '${any}' being unable to index the type

Can someone assist me with a missing piece in my Typescript code? const handleMouseClick = (itemName: string) => { dialogFunctionMapper[`${itemName}`](true); }; const handleDialogHide = (itemName: string) => { dialogFunction ...

How can we ensure that material-ui fields render properly following a reset call in react-hook-form?

I am currently working on a page for editing, but I have encountered an issue with react MUI not rendering text fields properly after updating my form data using the reset method from react-hook-form. This is the current appearance of the form: https://i ...

How does Typescript overlook such a peculiar inconsistency?

I've come across a peculiar situation where Typescript doesn't seem to differentiate between an object like {} and a generic array []. It accepts the latter as input for a function that is supposed to require an object with {}'s structure. ...

You were supposed to provide 2 arguments, but you only gave 1.ts(2554)

Hey everyone, I hope you're having a good morning. Apologies for the inconvenience, I've been practicing to improve my skills and encountered an issue while working on a login feature. I'm trying to connect it to an API but facing a strange ...