microsoft / microsoft/TypeScript
Type hinting remains slow after version 5.9.2
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
### π Search Terms
I use windows 10+ vscode 1.104.1+typescript 5.9.2+
I used [valibot](https://github.com/fabian-hiller/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
```ts
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
```
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up β it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the delay in the reported config.ts scenario with VS Code, TypeScript 5.9.2, and the Valibot declarations, then inspect the supplied typescript-analyze-trace output. Focus first on the reported checks involving OptionalSchema, ObjectSchema, and ExactOptionalSchema; done means identifying a TypeScript-side improvement and demonstrating faster prompting with a regression case.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers, developer-experience
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 28/100