microsoft / microsoft/TypeScript
Non-exported recursive type alias is inlined until it falls back to any in declarations
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
🔎 Search Terms
declarations recursive types
🕗 Version & Regression Information
- This is the behavior in every version I tried (before 4.4 it was either a stack overflow crash or an error on the recursive type)
⏯ Playground Link
💻 Code
// @declaration: true
// @filename: utils.ts
type Recursive<T> = T extends Array<infer V>? Recursive<V>: T;
export const f = <T>(): Recursive<T> => { return null! }
// @filename: index.ts
import { f } from './utils';
export const a = f;
🙁 Actual behavior
In declarations, the type for a is printed as a: () => T extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? any : V : V : V : V : V : V : V : V : V : V : T;
🙂 Expected behavior
Recursive can't be represented without falling back to any (as seen above) so it should just be an error instead of silently to any
Additional information about the issue
Related to #55832
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
Reproduisez la sortie des déclarations du lien Playground à l’aide de utils.ts et index.ts, en vous concentrant sur la fonction générique exportée et sur la déclaration de a. Suivez la manière dont l’alias Recursive non exporté est représenté lorsque les déclarations sont générées. Le travail est terminé lorsque ce cas signale une erreur au lieu de produire silencieusement un type profondément développé qui revient à any.
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é
- Plutôt claire
- Accessibilité débutants
- 42/100