Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[vue-query]: UseMutationReturnType default names unexported MutationResult (TS2883) 🤖🤖🤖

Aperta
#11,769 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@KirbyBT ci sta già lavorando.

Dal 1/10/2026.

  • #11796 di @KirbyBT — aperta

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
typescript
Ambito
frontend

Direzione di ricerca

Start with the vue-query adapter declarations for UseMutationReturnType and useMutation, using src/useExampleMutation.ts and the provided vue-tsc --build command as the reproduction. Trace how the published type references MutationResult, then verify that declaration emit succeeds without a private-type diagnostic or an unexported type reference.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Describe the bug

@tanstack/vue-query 5.104.0 publishes UseMutationReturnType with a default type argument that names MutationResult. MutationResult is not exported. A project that emits declarations (composite: true, which implies declaration) cannot name the inferred return type of an exported wrapper around useMutation.

TypeScript reports:

TS2883: The inferred type of 'useExampleMutation' cannot be named without a reference to 'MutationResult' from '@tanstack/vue-query/build/modern/useMutation'. This is likely not portable. A type annotation is necessary.

@ts-expect-error on the export suppresses TS2883 and is then reported as unused (TS2578). The diagnostic is produced during declaration emit, after TypeScript decides whether the directive was used. @ts-ignore is not a substitute we can use.

5.91.2 still declares the private alias, but the published .d.ts re-exports the function with export { type UseMutationReturnType, useMutation }. That form typechecks. 5.104.0 uses export type UseMutationReturnType<..., TResult = MutationResult<...>> and export declare function useMutation, and declaration emit then has to name MutationResult.

Related, and not the same report:

  • #6318 (closed) was an earlier "not portable" failure from tsup renaming exports.
  • #11038 (closed) was TS2883 under nodenext from experimentalDts.
  • #11042 (open) is the same class of bug for queryOptions(), not for useMutation.
Your minimal, reproducible example

No hosted sandbox. vue-tsc --build against a composite project is the reproduction. The three files below are complete.

package.json

{
  "private": true,
  "type": "module",
  "dependencies": {
    "@tanstack/vue-query": "5.104.0",
    "vue": "3.5.43"
  },
  "devDependencies": {
    "typescript": "6.0.3",
    "vue-tsc": "3.3.11"
  }
}

tsconfig.json

{
  "compilerOptions": {
    "composite": true,
    "module": "esnext",
    "moduleResolution": "bundler",
    "strict": true,
    "target": "esnext",
    "skipLibCheck": true
  },
  "include": ["src"]
}

src/useExampleMutation.ts

import { useMutation } from '@tanstack/vue-query'

export const useExampleMutation = () => {
  return useMutation({
    mutationFn: async () => 'ok',
  })
}
Steps to reproduce
  1. Install the three files above.
  2. Run pnpm exec vue-tsc --build --noEmit --force.
  3. See TS2883 on useExampleMutation.
  4. Repeat with @tanstack/vue-query 5.91.2. The same command exits 0.
Expected behavior

An exported wrapper around useMutation should typecheck under composite / declaration emit without naming a private type. MutationResult should be exported, or it should not appear as a default type argument on the public UseMutationReturnType.

How often does this bug happen?

Every time

Platform
  • OS: macOS
  • Browser: not applicable (vue-tsc)
  • Version: TypeScript 6.0.3, vue-tsc 3.3.11, Vue 3.5.43
Tanstack Query adapter

vue-query

TanStack Query version

5.104.0 (does not reproduce on 5.91.2)

TypeScript version

6.0.3

Additional context

Annotating the wrapper as UseMutationReturnType<TData, TError, TVariables, unknown> is not assignable to the value useMutation returns, because that value is instantiated with the private fifth type argument. The annotation only typechecks if the consumer copies MutationResult (DistributiveOmit<MutationObserverResult<...>, 'mutate' | 'reset'>). That copy has to stay in sync with an unexported alias.

Lingua principale
TypeScript
Stelle
50.4k
Fork
4.2k
Merge medio
7h 29m
PR unite (30g)
393

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di TanStack/query

Tutte le issue di TanStack/query

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.