Typescript не может вывести его, потому что вы возвращаете массив, где каждый элемент имеет другой тип. С точки зрения Typescript, он не может связать их без явного его ввода.
return [{data, isLoading, isError}, setUrl];
Первый подход заключается в том, что вы явно определяете тип возвращаемого значения useDataApi
метода:
const useDataApi = (initialUrl:string, initialData: IinitialData<Ihits>):
[{data: IinitialData; isLoading: boolean; isError: boolean}, string] => {
// your code here
}
Другой подход заключается в том, что вы возвращаете объект указанного c типа вместо массив. Вы можете определить пользовательский тип:
type DataApiResponse = {
response: {
data: IinitialData<Ihits>;
isLoading: boolean;
isError: boolean;
};
setUrl: Dispatch<SetStateAction<string>>;
}
, а затем использовать его как:
return {response: {data, isLoading, isError}, setUrl} as DataApiResponse;
Наконец внести изменения в UseDataFetch
метод:
const {response, setUrl} = useDataApi(
"https://hn.algolia.com/api/v1/search?query=redux",
{ hits: [] }
);
const {data, isError, isLoading} = response;