Variadic function argument not getting inferred correctly

Ouverte
#45,425 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
typescript
Domaine
compilers

Piste de recherche

Commencez par l’exemple TypeScript Playground lié et reproduisez l’erreur d’affectation impliquant le tuple variadique générique et l’argument FetchQueryOptions optionnel. Suivez le comportement de l’inférence des types et de l’assignabilité pour la signature de la fonction ; le travail est terminé lorsque l’exemple accepte l’implémentation et infère les arguments variadiques comme [string, number], tout en conservant le paramètre overrides optionnel.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Needs Investigation

Bug Report

I am trying to create a function type where the args are some variadic number of generic args, T, and the last arg is an optional overrides variables: overrides?: FetchQueryOptions<R>, but the variadic args,T, are unable to be assigned to any type. See below for code example.

🔎 Search Terms

Generic functions variadic tuple type inference spread

🕗 Version & Regression Information
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries
⏯ Playground Link

Playground link with relevant code

💻 Code
interface FetchQueryOptions<R> {
    fetchFunc?: () => R;
}

export interface IGetQueryFunc<R> {
  <T extends any[]>(
    ...args: [...rest: T, overrides?: FetchQueryOptions<R>]
  ): FetchQueryOptions<R>;
}

const getUserPostQuery: IGetQueryFunc<string> = (
  userId: string,
  postId: number,
  overrides?: FetchQueryOptions<string>
): FetchQueryOptions<string> => {
  return {
      fetchFunc: () => 'some data:' + `${userId}` + `${postId}`,
      ...overrides
  }
};
🙁 Actual behavior

I am getting the below error:

Type '(userId: string, postId: string, overrides?: FetchQueryOptions<string> | undefined) => FetchQueryOptions<string>' is not assignable to type 'IGetQueryFunc<string>'.
  Types of parameters 'userId' and 'rest' are incompatible.
    Type '[...rest: T, overrides?: FetchQueryOptions<string> | undefined]' is not assignable to type '[userId: string, postId: string, overrides?: FetchQueryOptions<string> | undefined]'.
      Variadic element at position 0 in source does not match element at position 0 in target.(2322)
🙂 Expected behavior

I expect the ...rest: T to be correctly inferred as [string, number]. and ...args to be inferred as [string, number, FetchQueryOptions<string> | undefined]

Langage dominant
Go
Étoiles
111k
Forks
14.4k
Merge moyen
1 j 19 h
PR mergées (30 j)
117

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/TypeScript

Toutes les issues de microsoft/TypeScript

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.