microsoft / microsoft/TypeScript

No error on self-referencing type parameter of non-generic mapped type

Ouverte
#62,176 0 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Bug Domain: Mapped Types Help Wanted
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

Description

🔎 Search Terms

mapped type circular self reference type parameter

🕗 Version & Regression Information
  • This is the behavior in every version I tried
⏯ Playground Link

https://www.typescriptlang.org/play/?ts=6.0.0-dev.20250801#code/C4TwDgpgBAKhDOwoF4oGsIgPYDMoG8AoKKAbQAUoBLAO3U1ynIF0AuKAVxrRqwHcahAL4BuQoQAmEAMYAbAIYAnaNKw1EUYAmDs4iMYQgAPMFkVIcXacCpqoAcwjA9wABQBKAsSjLgHRXRa+sKEQA

💻 Code
type Test = keyof {
  [P in keyof P]: unknown
};

declare const test: Test;

export function getTest() {
  return test;
}
🙁 Actual behavior

[P in keyof P] doesn't error anyhow but it's clearly circular. Furthermore, the generated .d.ts here is:

export declare function getTest(): keyof P;

P leaked here and this is invalid

🙂 Expected behavior

I'd expect this to produce a circularity error and at the very least the generated declaration file should not contain a leaked type variable

Additional information about the issue

cc @jfet97 who originally mentioned part of this to me in a DM 😉

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 le repro lié dans TypeScript Playground et vérifiez à la fois l’absence du diagnostic de circularité et le P qui s’est échappé dans la déclaration générée. Suivez la manière dont le compilateur traite [P in keyof P] et la sortie de déclaration pour ce cas. Le travail est terminé lorsque la référence circulaire est signalée et que la déclaration émise ne contient aucune variable de type échappée.

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

Évaluation

Stack technique
typescript
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

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