What is the process for incorporating the error type of useQueries in a TypeScript project?

Currently, I am utilizing react-query's useQueries function to create a unique custom hook named useArtists:

type SuccessResponse = {
  artist: {
    name: string
  }
};


const fetchArtist = async (artistId: string): Promise<SuccessResponse> => {
  const response = await axios.get(`/artists/${artistId}`);

  if (response.status !== 200) {
    throw response.data.error ?? "Unknown error";
  }

  return response.data;
};


export const useArtists = (artistIds: string[]) => {
  return useQueries({
    queries: artistIds.map((artistId) => {
      return {
        queryKey: ["artists", artistId],
        queryFn: () => fetchArtist(artistId),
      };
    }),
  });
};

The current inferred return type of useArtists is

UseQueryResult<SuccessResponse, unknown>[]
.

In order to include the return type of the error, which is string, how can I update the return type to be

UseQueryResult<SuccessResponse, string>[]
?

Answer №1

To add types to the useQueries method, you can specify them by annotating the queries parameter that is being passed to useQueries. For instance, in the provided code snippet, this can be achieved by supplying a generic type to the .map function itself:

type Artist = { name: string }

export const useArtists = (artistIds: string[]) => {
  return useQueries({
    queries: artistIds.map<UseQueryOptions<Artist[], Error>>((artistId) => {
      return {
        queryKey: ["artists", artistId],
        queryFn: () => fetchArtist(artistId),
      };
    }),
  });
};

The UseQueryOptions type can be accessed from the @tanstack/react-query library. This approach helps define the specific structure of your data and error handling.

For experimentation and exploration, utilize the provided link to access the TypeScript Playground.

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

The identifier "id" is not a valid index for this type

The code snippet below demonstrates the similarities and differences between the functions addThingExample2 and addThing. While addThingExample2 directly uses the union type Things, addThing utilizes a generic parameter THING extends Thing. The expression ...

The variable 'FC' has been defined, however it is not being utilized. This issue has been flagged by eslint's no-unused

After running eslint, I encountered a warning stating that X is defined but never used for every type imported from react or react-native. For example, this warning appeared for FC and ViewProps (refer to the image below). Below is my .eslintrc.js configu ...

Accessing Nested FormGroup in Angular 6 by its name

Dealing with Nested Form Groups address = new FormGroup({ 'com.complex.Address':new FormGroup({ city: cityControl, streetName: streetNameControl, houseNumberAddition: houseNumberAdditionControl, ho ...

Consolidate various arrays of objects while eliminating duplicate items based on an optional property

Imagine having multiple arrays like these: const arr1 = [ { "id": "1", "type": "sales" }, { "id": "2", "type": "finance" } ] const arr2 = [ { "type": "s ...

How can I store the status of checked and unchecked checkboxes in an array of objects using Angular 7?

I have a set of checkboxes with a parent-child structure, and their values are generated dynamically in a loop. When I click the submit button, I want to capture the selected or unselected values in the specified format (as shown in the commented output) ...

Guide for converting a JavaScript function with spread arguments of different types to C# style

I am having difficulty with the strict typing in C# when it comes to function arguments. For my Reverse Polish Notation (RPN) calculator, the required arguments will be passed through a function call using a comma-separated list of different types: this.F ...

TypeScript declarations for unidentified import statements

I currently have multiple require calls to register middleware in our Express server: app.use('/api/v1/seed_db', ac.allow('ROLE_ADMIN'), require('./routes/seed-db')); app.use('/api/v1/email', require('./routes/ ...

Creating a sophisticated union type by deriving it from another intricate union type

I have a unique data structure that includes different types and subtypes: type TypeOne = { type: 'type-one', uniqueKey1111: 1, }; type TypeTwo = { type: 'type-two', uniqueKey2222: 2, } type FirstType = { type: 'first&apo ...

React application facing a problem with bracket notation in Typescript

After creating a form state to store and update input changes, I encountered an issue: const [form, setForm] = useState({ user: '', email: '', password: '', }); I then wrote a function to handle form changes: const handle ...

Tips for accessing the app instance within a module in Nest.js

Currently, I am involved in a project that relies on multiple Nest repositories, approximately 4 in total. Each repository must integrate logging functionalities to monitor various events such as: Server lifecycle events Uncaught errors HTTP requests/resp ...

The specified type '{ state: any; dispatch: React.Dispatch<{ type: string; value: any; }>; }' is not compatible with the expected type

I've been working on a UI layout that includes checkboxes on the left, a data table on the right, and a drop zone box. The aim is to keep the table data updated whenever a new file is dropped, and also filter the data based on checkbox selection. I ma ...

Guide to transforming API Response into Custom type in Angular 5

Describing my method to structure the API Response - interface MyTest { property2: string } Incorporating Angular 5 Service Code - getAPI(searchKey: string) { this.productsAPIUrl = https://localhost:44331/api/SampleData/WeatherFore ...

Executing Child Validators when moving to the next step in an Angular MatStepper from the Parent Component

I am looking to implement validation for my Mat-Stepper-Next function in the App Component using child component validators. I have 3 different form components, each with its own form group, validations, and next button within the component. I am includi ...

After extraction from local storage, the type assertion is failing to work properly

I have a unique situation in my Angular project where I have stored an array of data points in the local storage. To handle this data, I have created a custom class as follows: export class Datapoint { id: number; name: string; // ... additional pr ...

Exploring the Applications of Directives in Multiple Modules within Angular 2

When I declare the directive in two modules, I get an error that says Type PermissionDirective is part of the declarations of 2 modules. However, when I declare it in only one module, I receive an error stating Can't bind to 'isPermission' s ...

Passing props from pages to components in NextJS: A guide

My nextjs-application has a unique folder structure: components -- layouts --- header.tsx --- index.tsx pages -- index.tsx -- [slug].tsx In the [slug].tsx file, I utilize graphql to fetch data and set the props accordingly: export default ...

How to eliminate file nesting in Visual Studio 2017

Is there a way to prevent certain file types from being nested within other files, such as .ts files not being nested beneath .html files? I came across this request, but has anyone found a solution to achieve this? ...

Unable to utilize MUI Dialog within a ReactDOMServer.renderToStaticMarkup() call

I recently started using the DIALOG component for the first time, expecting it to seamlessly integrate into my setup. However, much to my disappointment, it did not work as expected. After spending a considerable amount of time troubleshooting the issue, I ...

Enable the validation of properties that are not explicitly defined when using the @ValidateNested

I am using NesteJs and I am looking for a way to instruct @ValidateNested to skip properties that are not defined in the class without triggering an error: property should not exists Here are my classes: export default class InitialConfigClass extends Sha ...

Unraveling the mysteries of intricate JSON array and object data

I am currently facing a challenge in extracting complex JSON data for my Angular application. Here is an example of how the data is structured: { "members": [ { "member_id": "1", "first_name": "John", " ...