microsoft / microsoft/TypeScript

Error Messages Related to Nested Identical Generic Names Could Be More Explicit

Ouverte
#42,423 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Domain: Error Messages Experience Enhancement Needs Proposal Suggestion
Langage dominant
Go
Étoiles
111k
Forks
14.4k
Merge moyen
1 j 19 h
PR mergées (30 j)
117

Description

Suggestion

🔍 Search Terms

identical generics
overlapping generics
nested generics

✅ Viability Checklist

My suggestion meets these guidelines (please notify me if my checklist is incorrect):

  • This wouldn't be a breaking change in existing TypeScript/JavaScript code
  • This wouldn't change the runtime behavior of existing JavaScript code
  • This could be implemented without emitting different JS based on the types of the expressions
  • This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
  • This feature would agree with the rest of TypeScript's Design Goals.

⭐ Suggestion

Modify generic-related error messages, that involve 2 or more nested, identically named generic labels, to be more explicit.
e.g. Append "(which is a different type from the first 'T')" (or something similar) to the original message.

📃 Motivating Example

The following error message was caused by a function nested within a function using the same generic label (as well as some erroneous code.) I suggest we modify generic-related error messages where there are 2 or more nested generic labels that have the same name. A more explicit message would help nudge the developer towards the real error source.

image

Here is a snippet of the actual source code:

export function useForm<T extends FormFieldData>() {
  // ...
  function<T extends FormFieldData>(input: FormFieldKeys<T>) {
    // ...
  }
}

The solution in this case was removing the unnecessary nested generic and using the useForm scoped generic:

export function useForm<T extends FormFieldData>() {
  // ...
  function (input: FormFieldKeys<T>) {
    // ...
  }
}

@DanielRosenwasser @sandersn

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.

Piste de recherche

Commencez par reproduire l’exemple générique imbriqué de l’issue, en comparant les diagnostics produits lorsque le générique interne est nommé T avec la version qui utilise le T externe. Suivez le chemin de diagnostic du vérificateur de types de TypeScript pour ces erreurs et considérez le travail comme terminé lorsque les libellés génériques identiques imbriqués sont distingués sans modifier la sortie à l’exécution.

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

Évaluation

Stack technique
typescript
Domaine
compilers
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
30/100

Recevez les nouvelles issues par e-mail

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