You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is just a type bug that I have in my project, I found a solution that could / seems to fix the bug and wanted to discuss it here
Describe the bug
when using $fetch.create() with the first parameter (defaults: FetchOptions) explicitely defined in my code as of type FetchOptions<'json'> I see an error (pasted in the Log part of this issue)
Additional context
after trying a large number of solutions, I have found that in the $Fetch type definition, the create method ha no generic attached on the first argument.
this simple change seems to fix my issue. I don't know it this is the right solution though...
Logs
Argument of type'{ responseType: "json"; baseURL: string; body?: RequestInit["body"] | Record<string, any>; ignoreResponseError?: boolean; params?: Record<string, any>; query?: Record<string, any>; ... 24 more ...; onResponseError?: MaybeArray<...> | undefined; }' is not assignable to parameter of type'FetchOptions<ResponseType, any>'.
Types of property 'retryDelay' are incompatible.
Type 'number | ((context: FetchContext<any, "json">) => number) | undefined' is not assignable to type'number | ((context: FetchContext<any, ResponseType>) => number) | undefined'.
Type '(context: FetchContext<any, "json">) => number' is not assignable to type'number | ((context: FetchContext<any, ResponseType>) => number) | undefined'.
Type '(context: FetchContext<any, "json">) => number' is not assignable to type'(context: FetchContext<any, ResponseType>) => number'.
Types of parameters 'context' and 'context' are incompatible.
Type 'FetchContext<any, ResponseType>' is not assignable to type'FetchContext<any, "json">'.
Type 'ResponseType' is not assignable to type'"json"'.
Type '"text"' is not assignable to type'"json"'.
For more information, here is the code of the abstract class I have this issue in:
importtype{$Fetch,FetchOptions}from'ofetch';import{$fetch}from'ofetch';exporttypeRepositoryOptions=FetchOptions<'json'>;exportinterfaceApiResponseList<Item>{data: Item[],nbr: number,nb_pages: number,}exportdefaultabstractclassAbstractRepository<ApiItem>{private_fetch: $Fetch;constructor(fetchOptions: RepositoryOptions&{baseURL: string},applySecureOptions?: (options?: RepositoryOptions)=>RepositoryOptions|undefined){// Create the base fetch instance// @ts-ignore// @see: https://github.com/unjs/ofetch/issues/453this._fetch=$fetch.create({headers: {Accept: 'application/json',
...fetchOptions?.headers,},
...fetchOptions,responseType: 'json',});// Override the applySecureOptions methodif(applySecureOptions)this.applySecureOptions=applySecureOptions;};// Should add all the usefull stuff in requests for authentificated api callsprotectedapplySecureOptions(options?: RepositoryOptions): RepositoryOptions|undefined{returnoptions;}// This is where the magic happens! The api call is made here, with all the data neededprotectedasynccall<FetchResponse=ApiItem>(url: string,options?: RepositoryOptions): Promise<FetchResponse>{returnthis._fetch(url,{method: 'GET', ...options});}// the same thing than the `call` method, but with `applySecureOptions` applied// <!> if you didn't provide a `applySecureOptions` this does exactly the same as the `fetch` method...protectedasynccallSecure<FetchResponse=ApiItem>(url: string,options?: RepositoryOptions): Promise<FetchResponse>{constsecureOptions=this.applySecureOptions(options);returnthis._fetch(url,{method: 'GET', ...secureOptions});}}
Environment
"nuxt": "^3.13.2"
"typescript": "^5.6.3",
"vue-tsc": "^2.1.6"
Reproduction
This is just a type bug that I have in my project, I found a solution that could / seems to fix the bug and wanted to discuss it here
Describe the bug
when using $fetch.create() with the first parameter (
defaults: FetchOptions
) explicitely defined in my code as of typeFetchOptions<'json'>
I see an error (pasted in the Log part of this issue)Additional context
after trying a large number of solutions, I have found that in the
$Fetch
type definition, thecreate
method ha no generic attached on the first argument.this simple change seems to fix my issue. I don't know it this is the right solution though...
Logs
Edit:
I tried this in my project: #371
This seams to fix my problem, but can't confirm as of now...
The text was updated successfully, but these errors were encountered: