Sort unions without using type IDs
This is a port of https://github.com/microsoft/typescript-go/pull/200; unions are now sorted consistently without using type IDs.
Whether or not to merge this, I have no idea, but I really want to see the perf and results.
(That and it's needed for the port for comparing baselines.)
Looks like you're introducing a change to the public API surface area. If this includes breaking changes, please document them on our wiki's API Breaking Changes page.
Also, please make sure @DanielRosenwasser and @RyanCavanaugh are aware of the changes, just as a heads up.
@typescript-bot test it @typescript-bot pack this
Starting jobs; this comment will be updated as builds start and complete.
| Command | Status | Results |
|---|---|---|
pack this |
✅ Started | ✅ Results |
test top400 |
✅ Started | 👀 Results |
user test this |
✅ Started | 👀 Results |
run dt |
✅ Started | 👀 Results |
perf test this faster |
✅ Started | 👀 Results |
Hey @jakebailey, I've packed this into an installable tgz. You can install it for testing by referencing it in your package.json like so:
{
"devDependencies": {
"typescript": "https://typescript.visualstudio.com/cf7ac146-d525-443c-b23c-0d58337efebc/_apis/build/builds/164916/artifacts?artifactName=tgz&fileId=A2FCB945B94ACDC53E3D7A4F45018123C015539C515E48C2EC519EDF4BA4625B02&fileName=/typescript-5.9.0-insiders.20250311.tgz"
}
}
and then running npm install.
There is also a playground for this build and an npm module you can use via "typescript": "npm:@typescript-deploys/[email protected]".;
@jakebailey Here are the results of running the user tests with tsc comparing main and refs/pull/61399/merge:
Something interesting changed - please have a look.
Details
effect
tsconfig.json
- [NEW]
error TS2322: Type 'typeof MultipartError' is not assignable to type 'new (options: { readonly reason: "BodyTooLarge" | "FieldTooLarge" | "FileTooLarge" | "InternalError" | "Parse" | "TooManyParts"; readonly cause: unknown; }) => MultipartError'. - [NEW]
error TS2322: Type 'string' is not assignable to type '"inherit" | "pipe"'. - [NEW]
error TS2345: Argument of type 'string | Iterable<Part> | Iterable<Message> | Part' is not assignable to parameter of type 'Input'. - [MISSING]
error TS2322: Type 'typeof MultipartError' is not assignable to type 'new (options: { readonly reason: "FileTooLarge" | "FieldTooLarge" | "BodyTooLarge" | "TooManyParts" | "InternalError" | "Parse"; readonly cause: unknown; }) => MultipartError'. - [MISSING]
error TS2322: Type 'string' is not assignable to type '"pipe" | "inherit"'. - [MISSING]
error TS2345: Argument of type 'string | Part | Iterable<Part> | Iterable<Message>' is not assignable to parameter of type 'Input'.
tsconfig.build.json
- [NEW]
error TS2322: Type 'typeof MultipartError' is not assignable to type 'new (options: { readonly reason: "BodyTooLarge" | "FieldTooLarge" | "FileTooLarge" | "InternalError" | "Parse" | "TooManyParts"; readonly cause: unknown; }) => MultipartError'. - [NEW]
error TS2322: Type 'string' is not assignable to type '"inherit" | "pipe"'.- packages/platform-node-shared/src/internal/commandExecutor.ts#L20 in packages/platform-node-shared/tsconfig.src.json
- packages/platform-node-shared/src/internal/commandExecutor.ts#L23 in packages/platform-node-shared/tsconfig.src.json
- packages/platform-node-shared/src/internal/commandExecutor.ts#L20 in packages/platform-node-shared/tsconfig.build.json
- packages/platform-node-shared/src/internal/commandExecutor.ts#L23 in packages/platform-node-shared/tsconfig.build.json
- [NEW]
error TS2345: Argument of type 'string | Iterable<Part> | Iterable<Message> | Part' is not assignable to parameter of type 'Input'. - [MISSING]
error TS2322: Type 'typeof MultipartError' is not assignable to type 'new (options: { readonly reason: "FileTooLarge" | "FieldTooLarge" | "BodyTooLarge" | "TooManyParts" | "InternalError" | "Parse"; readonly cause: unknown; }) => MultipartError'. - [MISSING]
error TS2322: Type 'string' is not assignable to type '"pipe" | "inherit"'.- packages/platform-node-shared/src/internal/commandExecutor.ts#L20 in packages/platform-node-shared/tsconfig.src.json
- packages/platform-node-shared/src/internal/commandExecutor.ts#L23 in packages/platform-node-shared/tsconfig.src.json
- packages/platform-node-shared/src/internal/commandExecutor.ts#L20 in packages/platform-node-shared/tsconfig.build.json
- packages/platform-node-shared/src/internal/commandExecutor.ts#L23 in packages/platform-node-shared/tsconfig.build.json
- [MISSING]
error TS2345: Argument of type 'string | Part | Iterable<Part> | Iterable<Message>' is not assignable to parameter of type 'Input'.
tsconfig.base.json
- [NEW]
error TS2345: Argument of type 'string | Iterable<Part> | Iterable<Message> | Part' is not assignable to parameter of type 'Input'. - [NEW]
error TS2339: Property '_tag' does not exist on type 'ImagePart | ImageUrlPart | TextPart'. - [NEW]
error TS2339: Property 'image' does not exist on type 'ImagePart | ImageUrlPart | TextPart'. - [NEW]
error TS2339: Property 'asBase64' does not exist on type 'ImagePart | ImageUrlPart | TextPart'. - [NEW]
error TS2339: Property 'content' does not exist on type 'ImagePart | ImageUrlPart | TextPart'. - [NEW]
error TS2339: Property 'asDataUri' does not exist on type 'ImagePart | ImageUrlPart | TextPart'. - [NEW]
error TS2339: Property 'quality' does not exist on type 'ImagePart | ImageUrlPart | TextPart'. - [NEW]
error TS2339: Property 'url' does not exist on type 'ImagePart | ImageUrlPart | TextPart'. - [NEW]
error TS2322: Type 'typeof MultipartError' is not assignable to type 'new (options: { readonly reason: "BodyTooLarge" | "FieldTooLarge" | "FileTooLarge" | "InternalError" | "Parse" | "TooManyParts"; readonly cause: unknown; }) => MultipartError'. - [NEW]
error TS2345: Argument of type 'string | EmitWarningOptions | Function | undefined' is not assignable to parameter of type 'string | undefined'. - [MISSING]
error TS2345: Argument of type 'string | Part | Iterable<Part> | Iterable<Message>' is not assignable to parameter of type 'Input'. - [MISSING]
error TS2339: Property '_tag' does not exist on type 'TextPart | ImageUrlPart | ImagePart'. - [MISSING]
error TS2339: Property 'image' does not exist on type 'TextPart | ImageUrlPart | ImagePart'. - [MISSING]
error TS2339: Property 'asBase64' does not exist on type 'TextPart | ImageUrlPart | ImagePart'. - [MISSING]
error TS2339: Property 'content' does not exist on type 'TextPart | ImageUrlPart | ImagePart'. - [MISSING]
error TS2339: Property 'asDataUri' does not exist on type 'TextPart | ImageUrlPart | ImagePart'. - [MISSING]
error TS2339: Property 'quality' does not exist on type 'TextPart | ImageUrlPart | ImagePart'. - [MISSING]
error TS2339: Property 'url' does not exist on type 'TextPart | ImageUrlPart | ImagePart'. - [MISSING]
error TS2322: Type 'typeof MultipartError' is not assignable to type 'new (options: { readonly reason: "FileTooLarge" | "FieldTooLarge" | "BodyTooLarge" | "TooManyParts" | "InternalError" | "Parse"; readonly cause: unknown; }) => MultipartError'. - [MISSING]
error TS2345: Argument of type 'string | Function | EmitWarningOptions | undefined' is not assignable to parameter of type 'string | undefined'.
packages/platform/dtslint/tsconfig.json
- [NEW]
error TS2322: Type 'typeof MultipartError' is not assignable to type 'new (options: { readonly reason: "BodyTooLarge" | "FieldTooLarge" | "FileTooLarge" | "InternalError" | "Parse" | "TooManyParts"; readonly cause: unknown; }) => MultipartError'. - [MISSING]
error TS2322: Type 'typeof MultipartError' is not assignable to type 'new (options: { readonly reason: "FileTooLarge" | "FieldTooLarge" | "BodyTooLarge" | "TooManyParts" | "InternalError" | "Parse"; readonly cause: unknown; }) => MultipartError'.
lodash
/mnt/ts_downloads/_/m/lodash/tsconfig.json
- [NEW]
error TS2322: Type 'void | boolean' is not assignable to type 'boolean'.- /mnt/ts_downloads/_/m/lodash/node_modules/lodash/core.js(1361,5)
- [MISSING]
error TS2322: Type 'boolean | void' is not assignable to type 'boolean'.- /mnt/ts_downloads/_/m/lodash/node_modules/lodash/core.js(1361,5)
puppeteer
packages/puppeteer-core/tsconfig.json
- [NEW]
error TS2322: Type 'BidiElementHandle<Node> | BidiJSHandle<unknown>' is not assignable to type 'Awaited<ReturnType<Func>> | HandleFor<Awaited<ReturnType<Func>>>'. - [MISSING]
error TS2322: Type 'BidiJSHandle<unknown> | BidiElementHandle<Node>' is not assignable to type 'Awaited<ReturnType<Func>> | HandleFor<Awaited<ReturnType<Func>>>'.
Hey @jakebailey, the results of running the DT tests are ready.
There were interesting changes:
Branch only errors:
Package: react-redux/v5 Error:
Error:
/mnt/vss/_work/1/DefinitelyTyped/types/react-redux/v5/react-redux-tests.tsx
87:7 error TypeScript@local compile error:
Argument of type 'typeof TestComponent' is not assignable to parameter of type 'Component<(() => { bar: number; }) & DispatchProp<any>>'.
Type 'typeof TestComponent' is not assignable to type 'ComponentClass<(() => { bar: number; }) & DispatchProp<any>, any>'.
Types of parameters 'props' and 'props' are incompatible.
Type '(() => { bar: number; }) & DispatchProp<any>' is not assignable to type 'OwnProps & StateProps'.
Type '(() => { bar: number; }) & DispatchProp<any>' is not assignable to type 'OwnProps' @definitelytyped/expect
89:26 error TypeScript@local compile error:
Type '{ foo: string; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<Omit<(() => { bar: number; }) & DispatchProp<any>, "dispatch">, any, any>> & Readonly<...>'.
Property 'foo' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<Omit<(() => { bar: number; }) & DispatchProp<any>, "dispatch">, any, any>> & Readonly<...>' @definitelytyped/expect
236:7 error TypeScript@local compile error:
Argument of type 'typeof TestComponent' is not assignable to parameter of type 'Component<(() => { bar: number; }) & { onClick: () => void; }>'.
Type 'typeof TestComponent' is not assignable to type 'ComponentClass<(() => { bar: number; }) & { onClick: () => void; }, any>'.
Types of parameters 'props' and 'props' are incompatible.
Type '(() => { bar: number; }) & { onClick: () => void; }' is not assignable to type 'OwnProps & StateProps & DispatchProps'.
Type '(() => { bar: number; }) & { onClick: () => void; }' is not assignable to type 'OwnProps' @definitelytyped/expect
238:26 error TypeScript@local compile error:
Type '{ foo: string; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<Omit<(() => { bar: number; }) & { onClick: () => void; }, "onClick">, any, any>> & Readonly<...>'.
Property 'foo' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<Omit<(() => { bar: number; }) & { onClick: () => void; }, "onClick">, any, any>> & Readonly<...>' @definitelytyped/expect
265:7 error TypeScript@local compile error:
Argument of type 'typeof TestComponent' is not assignable to parameter of type 'Component<(() => { bar: number; }) & { onClick: () => void; }>'.
Type 'typeof TestComponent' is not assignable to type 'ComponentClass<(() => { bar: number; }) & { onClick: () => void; }, any>'.
Types of parameters 'props' and 'props' are incompatible.
Type '(() => { bar: number; }) & { onClick: () => void; }' is not assignable to type 'OwnProps & StateProps & DispatchProps'.
Type '(() => { bar: number; }) & { onClick: () => void; }' is not assignable to type 'OwnProps' @definitelytyped/expect
267:26 error TypeScript@local compile error:
Type '{ foo: string; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<Omit<(() => { bar: number; }) & { onClick: () => void; }, "onClick">, any, any>> & Readonly<...>'.
Property 'foo' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<Omit<(() => { bar: number; }) & { onClick: () => void; }, "onClick">, any, any>> & Readonly<...>' @definitelytyped/expect
✖ 6 problems (6 errors, 0 warnings)
at combineErrorsAndWarnings (/mnt/vss/_work/1/DefinitelyTyped/node_modules/.pnpm/@[email protected][email protected]/node_modules/@definitelytyped/dtslint/dist/index.js:194:28)
at runTests (/mnt/vss/_work/1/DefinitelyTyped/node_modules/.pnpm/@[email protected][email protected]/node_modules/@definitelytyped/dtslint/dist/index.js:186:20)
Package: json-logic-js Error:
Out of memory
Package: react-redux/v6 Error:
Error:
/mnt/vss/_work/1/DefinitelyTyped/types/react-redux/v6/react-redux-tests.tsx
98:21 error TypeScript@local compile error:
Property 'bar' is missing in type '{ foo: string; }' but required in type 'Readonly<Omit<OwnProps & StateProps, never>>' @definitelytyped/expect
339:21 error TypeScript@local compile error:
Property 'bar' is missing in type '{ foo: string; }' but required in type 'Readonly<Omit<OwnProps & StateProps & DispatchProps, "onClick">>' @definitelytyped/expect
368:21 error TypeScript@local compile error:
Property 'bar' is missing in type '{ foo: string; }' but required in type 'Readonly<Omit<OwnProps & StateProps & DispatchProps, "onClick">>' @definitelytyped/expect
✖ 3 problems (3 errors, 0 warnings)
at combineErrorsAndWarnings (/mnt/vss/_work/1/DefinitelyTyped/node_modules/.pnpm/@[email protected][email protected]/node_modules/@definitelytyped/dtslint/dist/index.js:194:28)
at runTests (/mnt/vss/_work/1/DefinitelyTyped/node_modules/.pnpm/@[email protected][email protected]/node_modules/@definitelytyped/dtslint/dist/index.js:186:20)
Package: react-redux Error:
Error:
/mnt/vss/_work/1/DefinitelyTyped/types/react-redux/react-redux-tests.tsx
108:21 error TypeScript@local compile error:
Property 'bar' is missing in type '{ foo: string; }' but required in type 'Omit<ClassAttributes<TestComponent> & OwnProps & StateProps, never>' @definitelytyped/expect
378:21 error TypeScript@local compile error:
Property 'bar' is missing in type '{ foo: string; }' but required in type 'Omit<ClassAttributes<TestComponent> & OwnProps & StateProps & DispatchProps, "onClick">' @definitelytyped/expect
407:21 error TypeScript@local compile error:
Property 'bar' is missing in type '{ foo: string; }' but required in type 'Omit<ClassAttributes<TestComponent> & OwnProps & StateProps & DispatchProps, "onClick">' @definitelytyped/expect
✖ 3 problems (3 errors, 0 warnings)
at combineErrorsAndWarnings (/mnt/vss/_work/1/DefinitelyTyped/node_modules/.pnpm/@[email protected][email protected]/node_modules/@definitelytyped/dtslint/dist/index.js:194:28)
at runTests (/mnt/vss/_work/1/DefinitelyTyped/node_modules/.pnpm/@[email protected][email protected]/node_modules/@definitelytyped/dtslint/dist/index.js:186:20)
Package: ramda Error:
Error:
/mnt/vss/_work/1/DefinitelyTyped/types/ramda/test/fromPairs-tests.ts
13:5 error TypeScript@local expected type to be:
{ 2: string; 1: string; }
got:
{ 1: string; 2: string; } @definitelytyped/expect
✖ 1 problem (1 error, 0 warnings)
at combineErrorsAndWarnings (/mnt/vss/_work/1/DefinitelyTyped/node_modules/.pnpm/@[email protected][email protected]/node_modules/@definitelytyped/dtslint/dist/index.js:194:28)
at runTests (/mnt/vss/_work/1/DefinitelyTyped/node_modules/.pnpm/@[email protected][email protected]/node_modules/@definitelytyped/dtslint/dist/index.js:186:20)
Package: codemirror Error:
Error:
/mnt/vss/_work/1/DefinitelyTyped/types/codemirror/test/addon/lint/lint.ts
61:5 error TypeScript@local compile error:
Unused '@ts-expect-error' directive @definitelytyped/expect
63:9 error TypeScript@local compile error:
Type '(content: string, options: any, cm: Editor) => null' is not assignable to type 'Linter<any>'.
Type 'null' is not assignable to type 'Annotation[] | PromiseLike<Annotation[]>' @definitelytyped/expect
✖ 2 problems (2 errors, 0 warnings)
at combineErrorsAndWarnings (/mnt/vss/_work/1/DefinitelyTyped/node_modules/.pnpm/@[email protected][email protected]/node_modules/@definitelytyped/dtslint/dist/index.js:194:28)
at runTests (/mnt/vss/_work/1/DefinitelyTyped/node_modules/.pnpm/@[email protected][email protected]/node_modules/@definitelytyped/dtslint/dist/index.js:186:20)
@jakebailey The results of the perf run you requested are in!
Here they are:
tsc
Comparison Report - baseline..pr| Metric | baseline | pr | Delta | Best | Worst | p-value |
|---|---|---|---|---|---|---|
| Compiler-Unions - node (v18.15.0, x64) | ||||||
| Errors | 34 | 34 | ~ | ~ | ~ | p=1.000 n=6 |
| Symbols | 62,390 | 62,312 | -78 (- 0.13%) | ~ | ~ | p=0.001 n=6 |
| Types | 50,395 | 50,392 | -3 (- 0.01%) | ~ | ~ | p=0.001 n=6 |
| Memory used | 194,149k (± 0.98%) | 195,786k (± 0.75%) | ~ | 192,795k | 196,403k | p=0.810 n=6 |
| Parse Time | 1.31s (± 0.84%) | 1.30s (± 0.79%) | ~ | 1.29s | 1.31s | p=0.530 n=6 |
| Bind Time | 0.73s | 0.73s (± 0.56%) | ~ | 0.73s | 0.74s | p=0.405 n=6 |
| Check Time | 9.76s (± 0.15%) | 12.10s (± 0.64%) | 🔻+2.34s (+23.97%) | 12.00s | 12.23s | p=0.005 n=6 |
| Emit Time | 2.76s (± 0.50%) | 2.74s (± 1.09%) | ~ | 2.71s | 2.78s | p=0.516 n=6 |
| Total Time | 14.56s (± 0.13%) | 16.88s (± 0.44%) | 🔻+2.32s (+15.96%) | 16.79s | 16.97s | p=0.005 n=6 |
| angular-1 - node (v18.15.0, x64) | ||||||
| Errors | 56 | 74 | 🔻+18 (+32.14%) | ~ | ~ | p=0.001 n=6 |
| Symbols | 948,670 | 954,563 | +5,893 (+ 0.62%) | ~ | ~ | p=0.001 n=6 |
| Types | 410,947 | 414,299 | +3,352 (+ 0.82%) | ~ | ~ | p=0.001 n=6 |
| Memory used | 1,224,304k (± 0.00%) | 1,236,270k (± 0.00%) | +11,966k (+ 0.98%) | 1,236,209k | 1,236,348k | p=0.005 n=6 |
| Parse Time | 6.66s (± 0.16%) | 6.61s (± 1.08%) | ~ | 6.52s | 6.69s | p=0.294 n=6 |
| Bind Time | 1.89s (± 0.40%) | 1.88s (± 0.29%) | ~ | 1.88s | 1.89s | p=0.137 n=6 |
| Check Time | 31.93s (± 0.41%) | 33.46s (± 0.38%) | 🔻+1.53s (+ 4.78%) | 33.26s | 33.61s | p=0.005 n=6 |
| Emit Time | 15.25s (± 0.36%) | 15.33s (± 0.41%) | +0.08s (+ 0.55%) | 15.29s | 15.46s | p=0.045 n=6 |
| Total Time | 55.74s (± 0.32%) | 57.29s (± 0.32%) | +1.55s (+ 2.78%) | 56.99s | 57.50s | p=0.005 n=6 |
| mui-docs - node (v18.15.0, x64) | ||||||
| Errors | 0 | 0 | ~ | ~ | ~ | p=1.000 n=6 |
| Symbols | 2,344,569 | 2,355,578 | +11,009 (+ 0.47%) | ~ | ~ | p=0.001 n=6 |
| Types | 845,044 | 848,437 | +3,393 (+ 0.40%) | ~ | ~ | p=0.001 n=6 |
| Memory used | 2,119,780k (± 0.01%) | 2,113,040k (± 0.01%) | -6,740k (- 0.32%) | 2,112,874k | 2,113,140k | p=0.005 n=6 |
| Parse Time | 7.39s (± 1.65%) | 7.33s (± 0.79%) | ~ | 7.27s | 7.41s | p=0.375 n=6 |
| Bind Time | 2.34s (± 6.36%) | 2.40s (± 3.40%) | ~ | 2.26s | 2.48s | p=0.332 n=6 |
| Check Time | 72.95s (± 0.47%) | 79.98s (± 1.09%) | 🔻+7.03s (+ 9.63%) | 78.29s | 80.85s | p=0.005 n=6 |
| Emit Time | 0.15s (± 3.52%) | 0.15s (± 5.56%) | ~ | 0.14s | 0.16s | p=0.929 n=6 |
| Total Time | 82.82s (± 0.40%) | 89.86s (± 0.96%) | 🔻+7.03s (+ 8.49%) | 88.19s | 90.71s | p=0.005 n=6 |
| self-build-src - node (v18.15.0, x64) | ||||||
| Errors | 0 | 0 | ~ | ~ | ~ | p=1.000 n=6 |
| Symbols | 1,226,697 | 1,227,367 | +670 (+ 0.05%) | ~ | ~ | p=0.001 n=6 |
| Types | 266,990 | 267,827 | +837 (+ 0.31%) | ~ | ~ | p=0.001 n=6 |
| Memory used | 2,356,784k (± 0.02%) | 2,361,801k (± 0.02%) | +5,017k (+ 0.21%) | 2,361,199k | 2,362,432k | p=0.005 n=6 |
| Parse Time | 5.22s (± 1.04%) | 5.21s (± 1.00%) | ~ | 5.17s | 5.28s | p=0.936 n=6 |
| Bind Time | 1.79s (± 0.77%) | 1.79s (± 0.93%) | ~ | 1.77s | 1.81s | p=0.675 n=6 |
| Check Time | 35.29s (± 0.44%) | 38.01s (± 0.53%) | 🔻+2.73s (+ 7.72%) | 37.79s | 38.37s | p=0.005 n=6 |
| Emit Time | 3.09s (± 4.23%) | 2.97s (± 2.28%) | ~ | 2.91s | 3.07s | p=0.077 n=6 |
| Total Time | 45.40s (± 0.52%) | 48.01s (± 0.55%) | 🔻+2.61s (+ 5.75%) | 47.76s | 48.49s | p=0.005 n=6 |
| self-build-src-public-api - node (v18.15.0, x64) | ||||||
| Errors | 0 | 0 | ~ | ~ | ~ | p=1.000 n=6 |
| Symbols | 1,226,697 | 1,227,367 | +670 (+ 0.05%) | ~ | ~ | p=0.001 n=6 |
| Types | 266,990 | 267,827 | +837 (+ 0.31%) | ~ | ~ | p=0.001 n=6 |
| Memory used | 2,790,829k (±14.22%) | 2,943,455k (±11.50%) | ~ | 2,431,486k | 3,160,643k | p=0.066 n=6 |
| Parse Time | 6.92s (± 1.63%) | 7.00s (± 1.03%) | ~ | 6.89s | 7.09s | p=0.298 n=6 |
| Bind Time | 2.14s (± 1.27%) | 2.17s (± 2.54%) | ~ | 2.11s | 2.26s | p=0.297 n=6 |
| Check Time | 42.75s (± 0.52%) | 45.83s (± 0.69%) | 🔻+3.08s (+ 7.21%) | 45.26s | 46.11s | p=0.005 n=6 |
| Emit Time | 3.54s (± 2.08%) | 3.47s (± 1.71%) | ~ | 3.41s | 3.55s | p=0.128 n=6 |
| Total Time | 55.37s (± 0.50%) | 58.47s (± 0.53%) | 🔻+3.11s (+ 5.61%) | 57.89s | 58.75s | p=0.005 n=6 |
| self-compiler - node (v18.15.0, x64) | ||||||
| Errors | 0 | 0 | ~ | ~ | ~ | p=1.000 n=6 |
| Symbols | 262,669 | 262,808 | +139 (+ 0.05%) | ~ | ~ | p=0.001 n=6 |
| Types | 106,848 | 106,926 | +78 (+ 0.07%) | ~ | ~ | p=0.001 n=6 |
| Memory used | 440,416k (± 0.02%) | 441,286k (± 0.02%) | +870k (+ 0.20%) | 441,175k | 441,403k | p=0.005 n=6 |
| Parse Time | 3.54s (± 1.71%) | 3.55s (± 1.11%) | ~ | 3.50s | 3.61s | p=0.809 n=6 |
| Bind Time | 1.31s (± 2.08%) | 1.32s (± 1.04%) | ~ | 1.29s | 1.33s | p=0.868 n=6 |
| Check Time | 18.91s (± 0.37%) | 20.49s (± 0.17%) | 🔻+1.59s (+ 8.40%) | 20.45s | 20.54s | p=0.005 n=6 |
| Emit Time | 1.52s (± 0.90%) | 1.53s (± 0.89%) | ~ | 1.52s | 1.55s | p=0.113 n=6 |
| Total Time | 25.27s (± 0.45%) | 26.90s (± 0.07%) | 🔻+1.63s (+ 6.43%) | 26.88s | 26.93s | p=0.005 n=6 |
| ts-pre-modules - node (v18.15.0, x64) | ||||||
| Errors | 71 | 71 | ~ | ~ | ~ | p=1.000 n=6 |
| Symbols | 225,981 | 225,617 | -364 (- 0.16%) | ~ | ~ | p=0.001 n=6 |
| Types | 94,356 | 94,365 | +9 (+ 0.01%) | ~ | ~ | p=0.001 n=6 |
| Memory used | 371,313k (± 0.04%) | 371,645k (± 0.06%) | +332k (+ 0.09%) | 371,445k | 371,925k | p=0.031 n=6 |
| Parse Time | 2.90s (± 1.64%) | 2.88s (± 1.34%) | ~ | 2.81s | 2.91s | p=0.126 n=6 |
| Bind Time | 1.61s (± 1.14%) | 1.59s (± 1.08%) | ~ | 1.57s | 1.62s | p=0.056 n=6 |
| Check Time | 16.50s (± 0.28%) | 17.71s (± 0.46%) | 🔻+1.21s (+ 7.31%) | 17.59s | 17.83s | p=0.005 n=6 |
| Emit Time | 0.00s (±154.76%) | 0.00s | ~ | ~ | ~ | p=0.174 n=6 |
| Total Time | 21.02s (± 0.36%) | 22.18s (± 0.45%) | 🔻+1.16s (+ 5.53%) | 22.05s | 22.31s | p=0.005 n=6 |
| vscode - node (v18.15.0, x64) | ||||||
| Errors | 7 | 7 | ~ | ~ | ~ | p=1.000 n=6 |
| Symbols | 3,277,211 | 3,260,478 | -16,733 (- 0.51%) | ~ | ~ | p=0.001 n=6 |
| Types | 1,109,144 | 1,108,896 | -248 (- 0.02%) | ~ | ~ | p=0.001 n=6 |
| Memory used | 3,339,238k (± 0.01%) | 3,335,469k (± 0.01%) | -3,770k (- 0.11%) | 3,335,053k | 3,335,729k | p=0.005 n=6 |
| Parse Time | 14.54s (± 0.91%) | 14.46s (± 0.56%) | ~ | 14.34s | 14.57s | p=0.230 n=6 |
| Bind Time | 4.61s (± 0.69%) | 4.65s (± 0.74%) | ~ | 4.63s | 4.72s | p=0.220 n=6 |
| Check Time | 90.01s (± 1.32%) | 92.57s (± 2.02%) | +2.56s (+ 2.84%) | 90.70s | 94.80s | p=0.020 n=6 |
| Emit Time | 29.53s (± 3.15%) | 28.95s (± 4.12%) | ~ | 26.95s | 30.69s | p=0.936 n=6 |
| Total Time | 138.70s (± 1.33%) | 140.62s (± 1.03%) | ~ | 138.84s | 142.24s | p=0.128 n=6 |
| webpack - node (v18.15.0, x64) | ||||||
| Errors | 29 | 29 | ~ | ~ | ~ | p=1.000 n=6 |
| Symbols | 295,142 | 293,741 | -1,401 (- 0.47%) | ~ | ~ | p=0.001 n=6 |
| Types | 120,554 | 120,588 | +34 (+ 0.03%) | ~ | ~ | p=0.001 n=6 |
| Memory used | 449,519k (± 0.02%) | 448,322k (± 0.01%) | -1,197k (- 0.27%) | 448,277k | 448,392k | p=0.005 n=6 |
| Parse Time | 4.09s (± 0.36%) | 4.07s (± 0.20%) | -0.02s (- 0.45%) | 4.06s | 4.08s | p=0.048 n=6 |
| Bind Time | 1.77s (± 1.49%) | 1.76s (± 0.86%) | ~ | 1.74s | 1.77s | p=0.231 n=6 |
| Check Time | 19.12s (± 0.54%) | 19.50s (± 0.34%) | +0.38s (+ 1.97%) | 19.43s | 19.61s | p=0.005 n=6 |
| Emit Time | 0.00s | 0.00s | ~ | ~ | ~ | p=1.000 n=6 |
| Total Time | 24.98s (± 0.37%) | 25.33s (± 0.31%) | +0.35s (+ 1.39%) | 25.25s | 25.47s | p=0.005 n=6 |
| xstate-main - node (v18.15.0, x64) | ||||||
| Errors | 5 | 5 | ~ | ~ | ~ | p=1.000 n=6 |
| Symbols | 557,004 | 556,446 | -558 (- 0.10%) | ~ | ~ | p=0.001 n=6 |
| Types | 187,723 | 188,255 | +532 (+ 0.28%) | ~ | ~ | p=0.001 n=6 |
| Memory used | 491,191k (± 0.05%) | 491,457k (± 0.01%) | +266k (+ 0.05%) | 491,412k | 491,534k | p=0.031 n=6 |
| Parse Time | 3.36s (± 0.62%) | 3.37s (± 0.98%) | ~ | 3.32s | 3.41s | p=0.515 n=6 |
| Bind Time | 1.19s (± 0.63%) | 1.19s (± 0.43%) | ~ | 1.19s | 1.20s | p=0.784 n=6 |
| Check Time | 19.96s (± 2.47%) | 20.13s (± 0.19%) | ~ | 20.07s | 20.17s | p=0.065 n=6 |
| Emit Time | 0.00s | 0.00s | ~ | ~ | ~ | p=1.000 n=6 |
| Total Time | 24.52s (± 1.99%) | 24.70s (± 0.16%) | ~ | 24.65s | 24.75s | p=0.066 n=6 |
- node (v18.15.0, x64)
- Compiler-Unions - node (v18.15.0, x64)
- angular-1 - node (v18.15.0, x64)
- mui-docs - node (v18.15.0, x64)
- self-build-src - node (v18.15.0, x64)
- self-build-src-public-api - node (v18.15.0, x64)
- self-compiler - node (v18.15.0, x64)
- ts-pre-modules - node (v18.15.0, x64)
- vscode - node (v18.15.0, x64)
- webpack - node (v18.15.0, x64)
- xstate-main - node (v18.15.0, x64)
| Benchmark | Name | Iterations |
|---|---|---|
| Current | pr | 6 |
| Baseline | baseline | 6 |
Developer Information:
@jakebailey Here are the results of running the top 400 repos with tsc comparing main and refs/pull/61399/merge:
Something interesting changed - please have a look.
Details
adobe/react-spectrum
10 of 15 projects failed to build with the old tsc and were ignored
packages/@spectrum-icons/illustrations/tsconfig.types.json
error TS2322: Type 'UnionToIntersection<{ id: string | undefined; } | NullToObject<T & { id?: string | undefined; }>>' is not assignable to type 'T'.
Chocobozzz/PeerTube
6 of 13 projects failed to build with the old tsc and were ignored
client/tsconfig.json
error TS2339: Property 'innerHTML' does not exist on type 'unknown'.error TS2345: Argument of type 'object' is not assignable to parameter of type 'Element'.error TS2345: Argument of type 'unknown' is not assignable to parameter of type 'Element'.error TS2740: Type '{}' is missing the following properties from type 'HTMLElement': accessKey, accessKeyLabel, autocapitalize, dir, and 303 more.
CopilotKit/CopilotKit
12 of 37 projects failed to build with the old tsc and were ignored
examples/copilot-form-filling/tsconfig.json
error TS2589: Type instantiation is excessively deep and possibly infinite.
dubinc/dub
5 of 9 projects failed to build with the old tsc and were ignored
packages/utils/tsconfig.json
error TS2339: Property 'ids' does not exist on type '{ monthly: number; yearly: number; ids: string[]; } | { monthly: number; yearly: number; } | { monthly: null; yearly: null; }'.
facebook/docusaurus
25 of 42 projects failed to build with the old tsc and were ignored
packages/docusaurus-plugin-rsdoctor/tsconfig.json
error TS2321: Excessive stack depth comparing types 'UnionToTuple<ArrayToUnion<[...?]>, LastOf<ArrayToUnion<[...?]>>, [ArrayToUnion<[...?]>] extends [never] ? true : false>' and 'ExtendRuleData<any, string>[]'.error TS2321: Excessive stack depth comparing types 'UnionToTuple<ArrayToUnion<[...Rules]>, LastOf<ArrayToUnion<[...Rules]>>, [ArrayToUnion<[...Rules]>] extends [...] ? true : false>' and 'ExtendRuleData<any, string>[]'.
heyverse/hey
3 of 12 projects failed to build with the old tsc and were ignored
apps/web/tsconfig.json
error TS2589: Type instantiation is excessively deep and possibly infinite.
hoarder-app/hoarder
1 of 17 projects failed to build with the old tsc and were ignored
apps/web/tsconfig.json
error TS2589: Type instantiation is excessively deep and possibly infinite.
motion-canvas/motion-canvas
13 of 18 projects failed to build with the old tsc and were ignored
packages/core/tsconfig.json
error TS2339: Property 'top' does not exist on type 'SerializedSpacing | [number, number]'.error TS2339: Property 'right' does not exist on type 'SerializedSpacing | [number, number]'.error TS2339: Property 'bottom' does not exist on type 'SerializedSpacing | [number, number]'.error TS2339: Property 'left' does not exist on type 'SerializedSpacing | [number, number]'.
packages/core/tsconfig.build.json
error TS2339: Property 'top' does not exist on type 'SerializedSpacing | [number, number]'.error TS2339: Property 'right' does not exist on type 'SerializedSpacing | [number, number]'.error TS2339: Property 'bottom' does not exist on type 'SerializedSpacing | [number, number]'.error TS2339: Property 'left' does not exist on type 'SerializedSpacing | [number, number]'.
react-navigation/react-navigation
9 of 14 projects failed to build with the old tsc and were ignored
tsconfig.json
error TS2315: Type 'StaticParamList' is not generic.- example/__typechecks__/static.check.tsx#L37 in tsconfig.json
- example/__typechecks__/static.check.tsx#L125 in tsconfig.json
- example/__typechecks__/static.check.tsx#L475 in tsconfig.json
- packages/core/src/StaticNavigation.tsx#L51 in tsconfig.json
- packages/core/src/StaticNavigation.tsx#L53 in tsconfig.json
error TS2578: Unused '@ts-expect-error' directive.- example/__typechecks__/static.check.tsx#L217 in tsconfig.json
- example/__typechecks__/static.check.tsx#L220 in tsconfig.json
- example/__typechecks__/static.check.tsx#L223 in tsconfig.json
- example/__typechecks__/static.check.tsx#L232 in tsconfig.json
- example/__typechecks__/static.check.tsx#L235 in tsconfig.json
- example/__typechecks__/static.check.tsx#L238 in tsconfig.json
- example/__typechecks__/static.check.tsx#L247 in tsconfig.json
- example/__typechecks__/static.check.tsx#L255 in tsconfig.json
- example/__typechecks__/static.check.tsx#L265 in tsconfig.json
- example/__typechecks__/static.check.tsx#L268 in tsconfig.json
error TS2456: Type alias 'StaticParamList' circularly references itself.
example/tsconfig.json
error TS2315: Type 'StaticParamList' is not generic.- packages/core/src/StaticNavigation.tsx#L51 in packages/core/tsconfig.json
- packages/core/src/StaticNavigation.tsx#L53 in packages/core/tsconfig.json
- example/__typechecks__/static.check.tsx#L37 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L125 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L475 in example/tsconfig.json
error TS2456: Type alias 'StaticParamList' circularly references itself.error TS2578: Unused '@ts-expect-error' directive.- example/__typechecks__/static.check.tsx#L217 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L220 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L223 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L232 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L235 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L238 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L247 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L255 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L265 in example/tsconfig.json
- example/__typechecks__/static.check.tsx#L268 in example/tsconfig.json
reduxjs/react-redux
1 of 3 projects failed to build with the old tsc and were ignored
tsconfig.json
error TS2741: Property 'bar' is missing in type '{ foo: string; }' but required in type '{ bar: number; foo: string; key?: Key | null | undefined; ref?: Ref<TestComponent> | undefined; context?: Context<ReactReduxContextValue<any, UnknownAction> | null> | undefined; store?: Store<any, UnknownAction, unknown> | undefined; }'.
reduxjs/redux-devtools
26 of 58 projects failed to build with the old tsc and were ignored
extension/tsconfig.json
error TS2322: Type 'PartialLiftedState<S, A>' is not assignable to type 'PartialLiftedState<PartialLiftedState<S, A> | undefined, A>'.
reduxjs/reselect
typescript_test/tsconfig.json
error TS2345: Argument of type '[(state: State, id: number, isCompleted: boolean) => { id: number; completed: boolean; }[], (state: State, id: number) => { id: number; completed: boolean; }, (state: State) => { ...; }[]]' is not assignable to parameter of type '[(state: State) => { id: number; completed: boolean; }[], (state: State, id: number) => { id: number; completed: boolean; }, (state: State, id: number, isCompleted: boolean) => { ...; }[]]'.
type-tests/tsconfig.json
error TS2344: Type '[Todo[], Alert[]]' does not satisfy the constraint '{ 0: { completed: "Expected: boolean, Actual: never"; id: number; read: "Expected: never, Actual: boolean"; }[]; 1: { completed: "Expected: never, Actual: boolean"; id: number; read: "Expected: boolean, Actual: never"; }[]; }'.- type-tests/createStructuredSelector.test-d.ts#L99
- type-tests/createStructuredSelector.test-d.ts#L173
- type-tests/createStructuredSelector.withTypes.test-d.ts#L108
- type-tests/createStructuredSelector.withTypes.test-d.ts#L180
- type-tests/createStructuredSelector.withTypes.test-d.ts#L359
- type-tests/createStructuredSelector.withTypes.test-d.ts#L440
- type-tests/createStructuredSelector.withTypes.test-d.ts#L524
error TS2344: Type '[Todo[], Alert[], Todo]' does not satisfy the constraint '{ 0: { completed: "Expected: boolean, Actual: never"; id: number; read: "Expected: never, Actual: boolean"; }[]; 1: { [x: number]: "Expected: ..., Actual: never"; completed: "Expected: never, Actual: boolean"; id: "Expected: never, Actual: number"; }; 2: { ...; }; }'.error TS2345: Argument of type '[(state: State, id: number, isCompleted: boolean) => { id: number; completed: boolean; }[], (state: State, id: number) => { id: number; completed: boolean; }, (state: State) => { ...; }[]]' is not assignable to parameter of type '[(state: State) => { id: number; completed: boolean; }[], (state: State, id: number) => { id: number; completed: boolean; }, (state: State, id: number, isCompleted: boolean) => { ...; }[]]'.
test/tsconfig.json
error TS2345: Argument of type '{ id: number; title: string; description: string; completed: boolean; }[]' is not assignable to parameter of type '{ id: number; message: string; type: string; read: boolean; }[]'.
RSSNext/Follow
3 of 14 projects failed to build with the old tsc and were ignored
apps/ssr/tsconfig.json
error TS2589: Type instantiation is excessively deep and possibly infinite.
TanStack/query
74 of 110 projects failed to build with the old tsc and were ignored
packages/vue-query/tsconfig.prod.json
error TS2769: No overload matches this call.error TS2344: Type 'boolean | undefined' does not satisfy the constraint '"Expected: boolean, Actual: number"'.
tusen-ai/naive-ui
3 of 6 projects failed to build with the old tsc and were ignored
src/tsconfig.demo.json
error TS2321: Excessive stack depth comparing types 'UnionToTuple<{ [K in T]: TLiteral<K>; }[T], UnionLast<{ [K in T]: TLiteral<K>; }[T]>>' and 'TSchema[]'.- file:///mnt/ts_downloads/_/m/naive-ui/node_modules/@sinclair/typebox/typebox.d.ts#L137 in src/tsconfig.demo.json
- file:///mnt/ts_downloads/_/m/naive-ui/node_modules/@sinclair/typebox/typebox.d.ts#L145 in src/tsconfig.demo.json
error TS2321: Excessive stack depth comparing types 'UnionToTuple<{ [K in S]: TLiteral<K>; }[S], UnionLast<{ [K in S]: TLiteral<K>; }[S]>>' and 'TLiteral<TLiteralValue>[]'.- file:///mnt/ts_downloads/_/m/naive-ui/node_modules/@sinclair/typebox/typebox.d.ts#L380 in src/tsconfig.demo.json
I know this is draft etc. I'm just wondering that is it intended that some NodeList changed to HTMLCollection and such? :) Or is due of something similar as #59729 ?
Yes, it's like that issue. Union order unfortunately matters in a couple of places, which is why I'm sending this at all!
Is this likely to help with issues like #53614?
Yes, I think so. Part of the Go port is that we need to make our code even more resilient to ordering changes, since we are now running multiple checkers at once.
Closing; if I want to retest this I'll repick from the tsgo-port branch with both sorting changes.