microsoft / microsoft/TypeScript
Type hinting remains slow after version 5.9.2
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
🔎 Search Terms
I use windows 10+ vscode 1.104.1+typescript 5.9.2+
I used valibot (a library similar to zod) in my project
As the code increases, the prompting speed becomes slower and slower. Now it takes about 3 seconds to prompt once (5900x 6c12t)
I have also tried using typescript-go for hinting, but the speed is not fast either (it's a bit faster than the current one, but it still requires waiting)
🕗 Version & Regression Information
This problem has always existed, and even after the optimization of types in 5.9.2, it is still slow
⏯ Playground Link
No response
💻 Code
a lot of code define
Approximately one thousand valibot functions were utilized (estimated value; as there are still some references)
like this
export const a= v.object({
selection: v.pipe(
v.optional(v.string()),
v.description('description'),
),
common: v.pipe(
v.optional(v.string()),
v.description('description'),
),
})
🙁 Actual behavior
Every time I enter code, I have to wait a few seconds before any prompt appears
🙂 Expected behavior
not slow
Additional information about the issue
I use https://github.com/microsoft/typescript-analyze-trace print some log
I hope it will be helpful to you
Hot Spots
└─ Check file c:\code\my-project\script\metadata\config.ts (2364ms)
└─ Check variable declaration from (line 264, char 14) to (line 703, char 3) (2069ms)
└─ Check expression from (line 264, char 23) to (line 703, char 3) (2068ms)
└─ Check expression from (line 264, char 32) to (line 703, char 2) (2056ms)
└─ Check expression from (line 658, char 19) to (line 664, char 4) (1502ms)
└─ Check expression from (line 659, char 5) to (line 663, char 7) (1501ms)
└─ Check expression from (line 659, char 16) to (line 659, char 33) (1499ms)
└─ Compare types 47331 and 1049 (1487ms)
└─ Compare types 47331 and 942 (1486ms)
├─ Compare types 47342 and 1049 (876ms)
│ └─ Compare types 47342 and 942 (876ms)
│ └─ Compare types 47360 and 1049 (864ms)
│ └─ Compare types 47360 and 942 (864ms)
│ ├─ {"id":47360,"kind":"GenericInstantiation","name":"OptionalSchema","instantiatedType":564,"typeArguments":[47359,10],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6476,"char":1}}
│ │ ├─ {"id":564,"kind":"GenericType","name":"OptionalSchema","typeArguments":[565,566],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6476,"char":1}}
│ │ │ ├─ {"id":565,"kind":"TypeParameter","name":"TWrapped","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6476,"char":26}}
│ │ │ └─ {"id":566,"kind":"TypeParameter","name":"TDefault","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6476,"char":93}}
│ │ ├─ {"id":47359,"kind":"GenericInstantiation","name":"ObjectSchema","instantiatedType":858,"typeArguments":[47358,10],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6241,"char":1}}
│ │ │ ├─ {"id":858,"kind":"GenericType","name":"ObjectSchema","typeArguments":[859,860],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6241,"char":1}}
│ │ │ │ ├─ {"id":859,"kind":"TypeParameter","name":"TEntries","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6241,"char":24}}
│ │ │ │ └─ {"id":860,"kind":"TypeParameter","name":"TMessage","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6241,"char":56}}
│ │ │ ├─ {"id":47358,"kind":"AnonymousType","location":{"path":"c:\code\my-project\node_modules\@cyia\llama\llama\define\index.d.ts","line":1075,"char":62}}
│ │ │ └─ {"id":10,"kind":"Intrinsic","name":"undefined"}
│ │ └─ {"id":10,"kind":"Intrinsic","name":"undefined"}
│ └─ {"id":942,"kind":"GenericInstantiation","name":"ExactOptionalSchema","instantiatedType":938,"typeArguments":[428,9],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":4509,"char":1}}
│ ├─ {"id":938,"kind":"GenericType","name":"ExactOptionalSchema","typeArguments":[939,940],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":4509,"char":1}}
│ │ ├─ {"id":939,"kind":"TypeParameter","name":"TWrapped","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":4509,"char":31}}
│ │ └─ {"id":940,"kind":"TypeParameter","name":"TDefault","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":4509,"char":98}}
│ ├─ {"id":428,"kind":"GenericInstantiation","name":"BaseSchema","instantiatedType":419,"typeArguments":[9,9,427],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3277,"char":1}}
│ │ ├─ {"id":419,"kind":"GenericType","name":"BaseSchema","typeArguments":[420,421,422],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3277,"char":1}}
│ │ │ ├─ {"id":420,"kind":"TypeParameter","name":"TInput","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3277,"char":22}}
│ │ │ ├─ {"id":421,"kind":"TypeParameter","name":"TOutput","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3277,"char":30}}
│ │ │ └─ {"id":422,"kind":"TypeParameter","name":"TIssue","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3277,"char":39}}
│ │ ├─ {"id":9,"kind":"Intrinsic","name":"unknown"}
│ │ └─ {"id":427,"kind":"GenericInstantiation","name":"BaseIssue","instantiatedType":424,"typeArguments":[9],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3850,"char":1}}
│ │ ├─ {"id":424,"kind":"GenericType","name":"BaseIssue","typeArguments":[425],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3850,"char":1}}
│ │ │ └─ {"id":425,"kind":"TypeParameter","name":"TInput","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3850,"char":21}}
│ │ └─ {"id":9,"kind":"Intrinsic","name":"unknown"}
│ └─ {"id":9,"kind":"Intrinsic","name":"unknown"}
└─ Compare types 129323 and 1049 (609ms)
└─ Compare types 129323 and 942 (609ms)
└─ Compare types 129332 and 1049 (605ms)
└─ Compare types 129332 and 942 (605ms)
├─ {"id":129332,"kind":"GenericInstantiation","name":"OptionalSchema","instantiatedType":564,"typeArguments":[129331,10],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6476,"char":1}}
│ ├─ {"id":564,"kind":"GenericType","name":"OptionalSchema","typeArguments":[565,566],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6476,"char":1}}
│ │ ├─ {"id":565,"kind":"TypeParameter","name":"TWrapped","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6476,"char":26}}
│ │ └─ {"id":566,"kind":"TypeParameter","name":"TDefault","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6476,"char":93}}
│ ├─ {"id":129331,"kind":"GenericInstantiation","name":"ObjectSchema","instantiatedType":858,"typeArguments":[129330,10],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6241,"char":1}}
│ │ ├─ {"id":858,"kind":"GenericType","name":"ObjectSchema","typeArguments":[859,860],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6241,"char":1}}
│ │ │ ├─ {"id":859,"kind":"TypeParameter","name":"TEntries","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6241,"char":24}}
│ │ │ └─ {"id":860,"kind":"TypeParameter","name":"TMessage","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":6241,"char":56}}
│ │ ├─ {"id":129330,"kind":"AnonymousType","location":{"path":"c:\code\my-project\node_modules\@cyia\llama\llama\define\index.d.ts","line":11,"char":62}}
│ │ └─ {"id":10,"kind":"Intrinsic","name":"undefined"}
│ └─ {"id":10,"kind":"Intrinsic","name":"undefined"}
└─ {"id":942,"kind":"GenericInstantiation","name":"ExactOptionalSchema","instantiatedType":938,"typeArguments":[428,9],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":4509,"char":1}}
├─ {"id":938,"kind":"GenericType","name":"ExactOptionalSchema","typeArguments":[939,940],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":4509,"char":1}}
│ ├─ {"id":939,"kind":"TypeParameter","name":"TWrapped","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":4509,"char":31}}
│ └─ {"id":940,"kind":"TypeParameter","name":"TDefault","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":4509,"char":98}}
├─ {"id":428,"kind":"GenericInstantiation","name":"BaseSchema","instantiatedType":419,"typeArguments":[9,9,427],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3277,"char":1}}
│ ├─ {"id":419,"kind":"GenericType","name":"BaseSchema","typeArguments":[420,421,422],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3277,"char":1}}
│ │ ├─ {"id":420,"kind":"TypeParameter","name":"TInput","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3277,"char":22}}
│ │ ├─ {"id":421,"kind":"TypeParameter","name":"TOutput","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3277,"char":30}}
│ │ └─ {"id":422,"kind":"TypeParameter","name":"TIssue","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3277,"char":39}}
│ ├─ {"id":9,"kind":"Intrinsic","name":"unknown"}
│ └─ {"id":427,"kind":"GenericInstantiation","name":"BaseIssue","instantiatedType":424,"typeArguments":[9],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3850,"char":1}}
│ ├─ {"id":424,"kind":"GenericType","name":"BaseIssue","typeArguments":[425],"location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3850,"char":1}}
│ │ └─ {"id":425,"kind":"TypeParameter","name":"TInput","location":{"path":"c:\code\my-project\node_modules\valibot\dist\index.d.ts","line":3850,"char":21}}
│ └─ {"id":9,"kind":"Intrinsic","name":"unknown"}
└─ {"id":9,"kind":"Intrinsic","name":"unknown"}
Duplicate packages
└─ undici-types
├─ Version 6.21.0 from C:/code/my-project/node_modules/@types/node/node_modules/undici-types
└─ Version 5.26.5 from C:/code/my-project/node_modules/undici-types
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 le délai dans le scénario config.ts signalé avec VS Code, TypeScript 5.9.2 et les déclarations de Valibot, puis examinez la sortie fournie de typescript-analyze-trace. Concentrez-vous d’abord sur les vérifications signalées concernant OptionalSchema, ObjectSchema et ExactOptionalSchema ; la tâche est terminée lorsque vous avez identifié une amélioration du côté de TypeScript et démontré une sollicitation plus rapide avec un cas de régression.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers, developer-experience
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 28/100