Skip to content

Don't eagerly simplify reducible generic union index types #46812

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

weswigham
Copy link
Member

@weswigham weswigham commented Nov 15, 2021

Fixes #45530

The issue wasn't that the mapped types were losing information, per sey, in fact, they were responsible for rehydrating missing information in some instances - instead, the issue was that we were too eagerly reducing the keyof result of unions over types which might have been reduced upon instantiation, like ({v: T} & {v: "a", a: string}) | ({v: T} & {v: "b", b: string}). Before this change, keyof that was just "v", while now it will remain the generic keyof (({v: T} & {v: "a", a: string}) | ({v: T} & {v: "b", b: string})), since instantiation can make it simplify to either keyof ({v: "a"} & {v: "a", a: string}) or keyof ({v: "b"} & {v: "b", b: string}), which have keys "v" | "a" or "v" | "b", respectively. (Which in turn trickles down to assignability behavior of mapped types over those kinds of keyof types)

@typescript-bot typescript-bot added Author: Team For Milestone Bug PRs that fix a bug with a specific milestone labels Nov 15, 2021
@andrewbranch
Copy link
Member

@typescript-bot perf test this
@typescript-bot user test this inline
@typescript-bot run dt

@typescript-bot
Copy link
Collaborator

typescript-bot commented Nov 15, 2021

Heya @andrewbranch, I've started to run the perf test suite on this PR at 43bfe00. You can monitor the build here.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

typescript-bot commented Nov 15, 2021

Heya @andrewbranch, I've started to run the inline community code test suite on this PR at 43bfe00. You can monitor the build here.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

typescript-bot commented Nov 15, 2021

Heya @andrewbranch, I've started to run the parallelized Definitely Typed test suite on this PR at 43bfe00. You can monitor the build here.

@typescript-bot
Copy link
Collaborator

@andrewbranch
Great news! no new errors were found between main..refs/pull/46812/merge

@typescript-bot
Copy link
Collaborator

@andrewbranch
The results of the perf run you requested are in!

Here they are:

Comparison Report - main..46812

Metric main 46812 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 354,588k (± 0.01%) 354,500k (± 0.02%) -88k (- 0.02%) 354,328k 354,587k
Parse Time 1.95s (± 0.51%) 1.96s (± 1.42%) +0.02s (+ 0.87%) 1.94s 2.07s
Bind Time 0.85s (± 0.53%) 0.85s (± 0.80%) -0.00s (- 0.24%) 0.84s 0.86s
Check Time 5.48s (± 0.42%) 5.49s (± 0.58%) +0.00s (+ 0.07%) 5.43s 5.56s
Emit Time 5.89s (± 0.77%) 5.88s (± 0.64%) -0.00s (- 0.07%) 5.80s 5.97s
Total Time 14.16s (± 0.47%) 14.18s (± 0.51%) +0.02s (+ 0.12%) 14.04s 14.34s
Compiler-Unions - node (v10.16.3, x64)
Memory used 204,051k (± 0.03%) 204,045k (± 0.02%) -6k (- 0.00%) 203,976k 204,160k
Parse Time 0.79s (± 0.84%) 0.79s (± 0.71%) -0.00s (- 0.25%) 0.78s 0.80s
Bind Time 0.52s (± 1.07%) 0.52s (± 1.67%) 0.00s ( 0.00%) 0.50s 0.54s
Check Time 7.82s (± 0.56%) 7.81s (± 0.48%) -0.01s (- 0.12%) 7.72s 7.88s
Emit Time 2.47s (± 1.34%) 2.47s (± 1.16%) -0.00s (- 0.00%) 2.44s 2.58s
Total Time 11.59s (± 0.46%) 11.58s (± 0.49%) -0.01s (- 0.09%) 11.48s 11.76s
Monaco - node (v10.16.3, x64)
Memory used 342,442k (± 0.03%) 342,479k (± 0.02%) +37k (+ 0.01%) 342,243k 342,621k
Parse Time 1.48s (± 0.65%) 1.49s (± 1.29%) +0.01s (+ 0.47%) 1.47s 1.56s
Bind Time 0.75s (± 0.63%) 0.75s (± 0.30%) -0.00s (- 0.13%) 0.74s 0.75s
Check Time 5.47s (± 0.67%) 5.45s (± 0.51%) -0.01s (- 0.22%) 5.39s 5.52s
Emit Time 3.22s (± 0.81%) 3.22s (± 0.93%) -0.01s (- 0.25%) 3.14s 3.26s
Total Time 10.92s (± 0.38%) 10.90s (± 0.37%) -0.02s (- 0.18%) 10.82s 11.03s
TFS - node (v10.16.3, x64)
Memory used 305,534k (± 0.02%) 305,532k (± 0.02%) -2k (- 0.00%) 305,407k 305,635k
Parse Time 1.20s (± 0.50%) 1.20s (± 1.04%) +0.01s (+ 0.75%) 1.18s 1.23s
Bind Time 0.71s (± 0.63%) 0.71s (± 0.56%) +0.00s (+ 0.42%) 0.70s 0.72s
Check Time 5.00s (± 0.59%) 5.04s (± 0.75%) +0.04s (+ 0.90%) 4.94s 5.12s
Emit Time 3.36s (± 1.17%) 3.34s (± 0.99%) -0.01s (- 0.42%) 3.27s 3.42s
Total Time 10.26s (± 0.58%) 10.30s (± 0.43%) +0.04s (+ 0.42%) 10.24s 10.43s
material-ui - node (v10.16.3, x64)
Memory used 471,381k (± 0.01%) 471,349k (± 0.01%) -32k (- 0.01%) 471,230k 471,474k
Parse Time 1.78s (± 0.26%) 1.79s (± 1.73%) +0.01s (+ 0.56%) 1.76s 1.91s
Bind Time 0.66s (± 1.13%) 0.66s (± 0.75%) -0.01s (- 1.06%) 0.65s 0.67s
Check Time 14.21s (± 0.54%) 14.14s (± 0.52%) -0.07s (- 0.51%) 14.02s 14.32s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 16.66s (± 0.46%) 16.59s (± 0.42%) -0.07s (- 0.40%) 16.44s 16.76s
xstate - node (v10.16.3, x64)
Memory used 568,980k (± 0.02%) 569,063k (± 0.01%) +83k (+ 0.01%) 568,864k 569,218k
Parse Time 2.56s (± 0.34%) 2.56s (± 0.49%) +0.00s (+ 0.08%) 2.54s 2.60s
Bind Time 1.01s (± 0.47%) 1.01s (± 0.52%) +0.00s (+ 0.20%) 1.00s 1.02s
Check Time 1.49s (± 0.66%) 1.50s (± 0.47%) +0.01s (+ 0.60%) 1.49s 1.52s
Emit Time 0.07s (± 3.14%) 0.07s (± 0.00%) -0.00s (- 1.41%) 0.07s 0.07s
Total Time 5.12s (± 0.32%) 5.14s (± 0.32%) +0.02s (+ 0.35%) 5.10s 5.18s
Angular - node (v12.1.0, x64)
Memory used 332,458k (± 0.02%) 332,427k (± 0.02%) -31k (- 0.01%) 332,266k 332,529k
Parse Time 1.94s (± 0.55%) 1.95s (± 0.65%) +0.01s (+ 0.67%) 1.92s 1.98s
Bind Time 0.81s (± 0.61%) 0.82s (± 0.82%) +0.00s (+ 0.37%) 0.80s 0.83s
Check Time 5.28s (± 0.42%) 5.30s (± 0.34%) +0.02s (+ 0.38%) 5.26s 5.35s
Emit Time 6.08s (± 0.37%) 6.13s (± 0.84%) +0.05s (+ 0.81%) 6.04s 6.25s
Total Time 14.11s (± 0.25%) 14.20s (± 0.41%) +0.09s (+ 0.62%) 14.09s 14.35s
Compiler-Unions - node (v12.1.0, x64)
Memory used 191,471k (± 0.10%) 191,544k (± 0.02%) +72k (+ 0.04%) 191,468k 191,621k
Parse Time 0.78s (± 0.97%) 0.78s (± 0.86%) -0.01s (- 0.89%) 0.77s 0.80s
Bind Time 0.53s (± 1.29%) 0.53s (± 1.04%) +0.01s (+ 1.14%) 0.52s 0.54s
Check Time 7.28s (± 0.61%) 7.30s (± 0.35%) +0.02s (+ 0.25%) 7.27s 7.39s
Emit Time 2.47s (± 0.87%) 2.47s (± 0.65%) -0.01s (- 0.28%) 2.42s 2.49s
Total Time 11.07s (± 0.54%) 11.08s (± 0.24%) +0.01s (+ 0.11%) 11.04s 11.16s
Monaco - node (v12.1.0, x64)
Memory used 325,547k (± 0.03%) 325,494k (± 0.02%) -53k (- 0.02%) 325,336k 325,643k
Parse Time 1.46s (± 0.63%) 1.46s (± 0.83%) -0.01s (- 0.41%) 1.43s 1.48s
Bind Time 0.72s (± 0.69%) 0.73s (± 0.79%) +0.01s (+ 1.10%) 0.72s 0.75s
Check Time 5.32s (± 0.52%) 5.32s (± 0.34%) -0.00s (- 0.08%) 5.28s 5.36s
Emit Time 3.21s (± 0.58%) 3.20s (± 0.49%) -0.01s (- 0.16%) 3.16s 3.23s
Total Time 10.72s (± 0.27%) 10.71s (± 0.30%) -0.01s (- 0.09%) 10.63s 10.77s
TFS - node (v12.1.0, x64)
Memory used 290,300k (± 0.02%) 290,297k (± 0.02%) -3k (- 0.00%) 290,136k 290,388k
Parse Time 1.21s (± 0.81%) 1.21s (± 0.63%) -0.01s (- 0.58%) 1.19s 1.22s
Bind Time 0.69s (± 0.72%) 0.69s (± 1.16%) +0.01s (+ 0.87%) 0.68s 0.72s
Check Time 4.92s (± 0.33%) 4.94s (± 0.65%) +0.02s (+ 0.45%) 4.88s 5.00s
Emit Time 3.39s (± 1.02%) 3.40s (± 1.02%) +0.01s (+ 0.24%) 3.31s 3.46s
Total Time 10.21s (± 0.32%) 10.24s (± 0.57%) +0.03s (+ 0.32%) 10.08s 10.36s
material-ui - node (v12.1.0, x64)
Memory used 449,859k (± 0.08%) 450,128k (± 0.01%) +269k (+ 0.06%) 450,026k 450,250k
Parse Time 1.77s (± 0.35%) 1.78s (± 0.47%) +0.01s (+ 0.28%) 1.76s 1.79s
Bind Time 0.64s (± 0.70%) 0.63s (± 0.71%) -0.01s (- 0.94%) 0.62s 0.64s
Check Time 12.71s (± 0.73%) 12.69s (± 0.57%) -0.03s (- 0.20%) 12.60s 12.90s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 15.12s (± 0.61%) 15.10s (± 0.52%) -0.03s (- 0.17%) 15.00s 15.32s
xstate - node (v12.1.0, x64)
Memory used 534,952k (± 0.02%) 538,498k (± 1.44%) +3,546k (+ 0.66%) 534,776k 569,767k
Parse Time 2.49s (± 0.66%) 2.50s (± 0.54%) +0.01s (+ 0.56%) 2.47s 2.53s
Bind Time 1.03s (± 0.63%) 1.04s (± 0.91%) +0.01s (+ 0.48%) 1.02s 1.07s
Check Time 1.43s (± 0.35%) 1.43s (± 0.61%) +0.00s (+ 0.14%) 1.41s 1.44s
Emit Time 0.07s (± 0.00%) 0.07s (± 3.14%) +0.00s (+ 1.43%) 0.07s 0.08s
Total Time 5.01s (± 0.28%) 5.03s (± 0.26%) +0.02s (+ 0.42%) 5.00s 5.06s
Angular - node (v14.15.1, x64)
Memory used 330,877k (± 0.01%) 330,880k (± 0.01%) +3k (+ 0.00%) 330,832k 330,918k
Parse Time 1.94s (± 0.33%) 1.94s (± 0.57%) -0.00s (- 0.10%) 1.92s 1.97s
Bind Time 0.86s (± 0.72%) 0.86s (± 0.75%) -0.00s (- 0.12%) 0.84s 0.87s
Check Time 5.36s (± 0.33%) 5.37s (± 0.30%) +0.01s (+ 0.21%) 5.34s 5.42s
Emit Time 6.18s (± 0.48%) 6.15s (± 0.78%) -0.02s (- 0.36%) 6.09s 6.32s
Total Time 14.34s (± 0.30%) 14.32s (± 0.37%) -0.02s (- 0.13%) 14.25s 14.50s
Compiler-Unions - node (v14.15.1, x64)
Memory used 191,777k (± 0.63%) 192,457k (± 0.56%) +680k (+ 0.35%) 190,193k 193,491k
Parse Time 0.81s (± 0.59%) 0.81s (± 0.42%) +0.00s (+ 0.00%) 0.80s 0.81s
Bind Time 0.55s (± 0.60%) 0.55s (± 0.54%) +0.00s (+ 0.36%) 0.55s 0.56s
Check Time 7.34s (± 0.59%) 7.36s (± 0.55%) +0.03s (+ 0.35%) 7.27s 7.45s
Emit Time 2.47s (± 1.06%) 2.48s (± 0.81%) +0.00s (+ 0.08%) 2.44s 2.52s
Total Time 11.17s (± 0.48%) 11.20s (± 0.42%) +0.03s (+ 0.23%) 11.07s 11.28s
Monaco - node (v14.15.1, x64)
Memory used 324,317k (± 0.01%) 324,319k (± 0.01%) +2k (+ 0.00%) 324,285k 324,391k
Parse Time 1.50s (± 0.45%) 1.51s (± 0.53%) +0.00s (+ 0.20%) 1.49s 1.53s
Bind Time 0.75s (± 0.48%) 0.76s (± 0.73%) +0.00s (+ 0.53%) 0.75s 0.77s
Check Time 5.27s (± 0.71%) 5.29s (± 0.64%) +0.02s (+ 0.34%) 5.23s 5.40s
Emit Time 3.24s (± 0.61%) 3.28s (± 1.53%) +0.04s (+ 1.20%) 3.19s 3.44s
Total Time 10.77s (± 0.50%) 10.83s (± 0.79%) +0.06s (+ 0.56%) 10.67s 11.12s
TFS - node (v14.15.1, x64)
Memory used 289,184k (± 0.01%) 289,179k (± 0.01%) -5k (- 0.00%) 289,129k 289,228k
Parse Time 1.23s (± 0.61%) 1.24s (± 0.97%) +0.01s (+ 1.06%) 1.22s 1.26s
Bind Time 0.73s (± 0.64%) 0.74s (± 0.81%) +0.01s (+ 0.68%) 0.72s 0.75s
Check Time 4.92s (± 0.60%) 4.92s (± 0.48%) -0.00s (- 0.06%) 4.86s 4.96s
Emit Time 3.48s (± 1.28%) 3.47s (± 1.34%) -0.01s (- 0.26%) 3.31s 3.58s
Total Time 10.35s (± 0.48%) 10.36s (± 0.45%) +0.01s (+ 0.07%) 10.27s 10.50s
material-ui - node (v14.15.1, x64)
Memory used 448,345k (± 0.01%) 448,382k (± 0.01%) +37k (+ 0.01%) 448,332k 448,453k
Parse Time 1.83s (± 0.41%) 1.83s (± 0.55%) -0.00s (- 0.16%) 1.81s 1.86s
Bind Time 0.68s (± 0.50%) 0.68s (± 0.44%) +0.00s (+ 0.15%) 0.67s 0.68s
Check Time 12.72s (± 0.32%) 12.74s (± 0.42%) +0.02s (+ 0.18%) 12.64s 12.88s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 15.22s (± 0.25%) 15.24s (± 0.36%) +0.02s (+ 0.12%) 15.15s 15.38s
xstate - node (v14.15.1, x64)
Memory used 532,767k (± 0.01%) 532,770k (± 0.01%) +2k (+ 0.00%) 532,705k 532,875k
Parse Time 2.54s (± 0.23%) 2.56s (± 0.94%) +0.02s (+ 0.83%) 2.53s 2.61s
Bind Time 1.15s (± 0.96%) 1.15s (± 0.67%) -0.00s (- 0.09%) 1.13s 1.17s
Check Time 1.47s (± 0.46%) 1.48s (± 0.54%) +0.01s (+ 0.54%) 1.46s 1.50s
Emit Time 0.07s (± 0.00%) 0.07s (± 0.00%) 0.00s ( 0.00%) 0.07s 0.07s
Total Time 5.24s (± 0.25%) 5.27s (± 0.48%) +0.03s (+ 0.55%) 5.22s 5.32s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-210-generic
Architecturex64
Available Memory16 GB
Available Memory12 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v10.16.3, x64)
  • node (v12.1.0, x64)
  • node (v14.15.1, x64)
Scenarios
  • Angular - node (v10.16.3, x64)
  • Angular - node (v12.1.0, x64)
  • Angular - node (v14.15.1, x64)
  • Compiler-Unions - node (v10.16.3, x64)
  • Compiler-Unions - node (v12.1.0, x64)
  • Compiler-Unions - node (v14.15.1, x64)
  • Monaco - node (v10.16.3, x64)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v14.15.1, x64)
  • TFS - node (v10.16.3, x64)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v14.15.1, x64)
  • material-ui - node (v10.16.3, x64)
  • material-ui - node (v12.1.0, x64)
  • material-ui - node (v14.15.1, x64)
  • xstate - node (v10.16.3, x64)
  • xstate - node (v12.1.0, x64)
  • xstate - node (v14.15.1, x64)
Benchmark Name Iterations
Current 46812 10
Baseline main 10

Developer Information:

Download Benchmark

@weswigham
Copy link
Member Author

All the extended CI results and perf look fine. Reviews please~

@sandersn
Copy link
Member

@weswigham Is this ready? Does it need another review? I just noticed it when going through the Needs Merge column of the PR backlog.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Author: Team For Milestone Bug PRs that fix a bug with a specific milestone
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

Nested Mapped Type Doesn't Cause Error for Mismatch enum when Single Mapped Type Does
4 participants