microsoft / microsoft/TypeScript
Error Messages Related to Nested Identical Generic Names Could Be More Explicit
Personne n'a encore pris cette issue.
- 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.

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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- 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