From 9bb594b92b6e4f78af14f08a1e0feb9fec762496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Mon, 6 Oct 2025 08:53:58 +0200 Subject: [PATCH] Fix translation bug causing `unknown` infer-extends constraint to be emitted --- internal/checker/nodebuilderimpl.go | 2 +- ...mputedTypesKeyofNoIndexSignatureType.types | 2 +- ...dTypesKeyofNoIndexSignatureType.types.diff | 2 +- ...dTypeDistributivityPreservesConstraints.js | 50 ++-------------- ...DistributivityPreservesConstraints.js.diff | 59 +++---------------- ...peDistributivityPreservesConstraints.types | 6 +- ...tributivityPreservesConstraints.types.diff | 6 +- ...pedTypePreservesTypeParameterConstraint.js | 16 ++--- ...pePreservesTypeParameterConstraint.js.diff | 16 ++--- ...TypePreservesTypeParameterConstraint.types | 16 ++--- ...reservesTypeParameterConstraint.types.diff | 16 ++--- ...nericInstantiationPreservesHomomorphism.js | 2 +- ...InstantiationPreservesHomomorphism.js.diff | 2 +- ...icInstantiationPreservesHomomorphism.types | 10 ++-- ...tantiationPreservesHomomorphism.types.diff | 10 ++-- .../noCircularitySelfReferentialGetter1.types | 4 +- ...rcularitySelfReferentialGetter1.types.diff | 4 +- .../noCircularitySelfReferentialGetter2.types | 4 +- ...rcularitySelfReferentialGetter2.types.diff | 4 +- 19 files changed, 75 insertions(+), 156 deletions(-) diff --git a/internal/checker/nodebuilderimpl.go b/internal/checker/nodebuilderimpl.go index ab8e12a313..170ba9cca8 100644 --- a/internal/checker/nodebuilderimpl.go +++ b/internal/checker/nodebuilderimpl.go @@ -1440,7 +1440,7 @@ func (b *nodeBuilderImpl) createMappedTypeNodeFromType(t *Type) *ast.TypeNode { originalConstraint := b.ch.instantiateType(rawConstraintTypeFromDeclaration, mapped.mapper) var originalConstraintNode *ast.Node - if originalConstraint.flags&TypeFlagsUnknown != 0 { + if originalConstraint.flags&TypeFlagsUnknown == 0 { originalConstraintNode = b.typeToTypeNode(originalConstraint) } diff --git a/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types b/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types index daae4f44f8..ffebd3d4a6 100644 --- a/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types +++ b/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types @@ -2,7 +2,7 @@ === computedTypesKeyofNoIndexSignatureType.ts === type Compute = { [K in keyof A]: Compute; } & {}; ->Compute : { [K in keyof A]: A[K_1] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8][K_9] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8][K_9][K_10] extends infer T extends unknown ? { [K in keyof T]: any; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } +>Compute : { [K in keyof A]: A[K_1] extends infer T ? { [K in keyof T]: A[K_1][K_2] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8][K_9] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8][K_9][K_10] extends infer T ? { [K in keyof T]: any; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } type EqualsTest = () => A extends T ? 1 : 0; >EqualsTest : EqualsTest diff --git a/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types.diff b/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types.diff index 2b68cafef0..86e61577c9 100644 --- a/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types.diff +++ b/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types.diff @@ -5,7 +5,7 @@ === computedTypesKeyofNoIndexSignatureType.ts === type Compute = { [K in keyof A]: Compute; } & {}; ->Compute : { [K in keyof A]: A[K] extends infer T ? { [K_1 in keyof T]: T[K_1] extends infer T_1 ? { [K_2 in keyof T_1]: T_1[K_2] extends infer T_2 ? { [K_3 in keyof T_2]: T_2[K_3] extends infer T_3 ? { [K_4 in keyof T_3]: T_3[K_4] extends infer T_4 ? { [K_5 in keyof T_4]: T_4[K_5] extends infer T_5 ? { [K_6 in keyof T_5]: T_5[K_6] extends infer T_6 ? { [K_7 in keyof T_6]: T_6[K_7] extends infer T_7 ? { [K_8 in keyof T_7]: T_7[K_8] extends infer T_8 ? { [K_9 in keyof T_8]: T_8[K_9] extends infer T_9 ? { [K_10 in keyof T_9]: any; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } -+>Compute : { [K in keyof A]: A[K_1] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8][K_9] extends infer T extends unknown ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8][K_9][K_10] extends infer T extends unknown ? { [K in keyof T]: any; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } ++>Compute : { [K in keyof A]: A[K_1] extends infer T ? { [K in keyof T]: A[K_1][K_2] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8][K_9] extends infer T ? { [K in keyof T]: A[K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8][K_9][K_10] extends infer T ? { [K in keyof T]: any; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } : never; } type EqualsTest = () => A extends T ? 1 : 0; >EqualsTest : EqualsTest \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js index 736c247093..251410e062 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js @@ -50,50 +50,12 @@ export default _default; declare const _default: { test: { fn: (sliceIndex: T) => T["x"] extends infer T_1 ? { [K in keyof T_1]: Parameters; } : never; + x: T["x"] extends infer T_1 extends { + [x: string]: (...params: unknown[]) => unknown; + } ? { [K in keyof T_1]: T["x"][K]; } : never; + }>(sliceIndex: T) => T["x"] extends infer T_1 extends { + [x: string]: (...params: unknown[]) => unknown; + } ? { [K in keyof T_1]: Parameters; } : never; }; }; export default _default; - - -//// [DtsFileErrors] - - -reexport.d.ts(5,88): error TS2344: Type 'T["x"][K]' does not satisfy the constraint '(...args: any) => any'. - Type 'T["x"][keyof T_1]' is not assignable to type '(...args: any) => any'. - Type 'T["x"][string] | T["x"][number] | T["x"][symbol]' is not assignable to type '(...args: any) => any'. - Type 'T["x"][string]' is not assignable to type '(...args: any) => any'. - - -==== types.d.ts (0 errors) ==== - type Fns = Record unknown>; - type Map = { - [K in keyof T]: T[K]; - }; - type AllArg = { - [K in keyof T]: Parameters; - }; - declare function fn; - }>(sliceIndex: T): AllArg; - declare const _default: { - fn: typeof fn; - }; - export default _default; - -==== reexport.d.ts (1 errors) ==== - declare const _default: { - test: { - fn: (sliceIndex: T) => T["x"] extends infer T_1 ? { [K in keyof T_1]: Parameters; } : never; - ~~~~~~~~~ -!!! error TS2344: Type 'T["x"][K]' does not satisfy the constraint '(...args: any) => any'. -!!! error TS2344: Type 'T["x"][keyof T_1]' is not assignable to type '(...args: any) => any'. -!!! error TS2344: Type 'T["x"][string] | T["x"][number] | T["x"][symbol]' is not assignable to type '(...args: any) => any'. -!!! error TS2344: Type 'T["x"][string]' is not assignable to type '(...args: any) => any'. - }; - }; - export default _default; - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js.diff b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js.diff index 70deef9e58..180b1f2c78 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js.diff +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js.diff @@ -9,60 +9,17 @@ exports.default = { test: types_1.default }; -@@= skipped -23, +23 lines =@@ - declare const _default: { - test: { +@@= skipped -25, +25 lines =@@ fn: unknown; + x: T["x"] extends infer T_1 extends { + [x: string]: (...params: unknown[]) => unknown; - } ? { [K in keyof T_1]: T_1[K]; } : never; - }>(sliceIndex: T) => T["x"] extends infer T_2 extends { -- [x: string]: (...params: unknown[]) => unknown; ++ } ? { [K in keyof T_1]: T["x"][K]; } : never; ++ }>(sliceIndex: T) => T["x"] extends infer T_1 extends { + [x: string]: (...params: unknown[]) => unknown; - } ? { [K_1 in keyof T_2]: Parameters; } : never; -+ x: T["x"] extends infer T_1 ? { [K in keyof T_1]: T["x"][K]; } : never; -+ }>(sliceIndex: T) => T["x"] extends infer T_1 ? { [K in keyof T_1]: Parameters; } : never; ++ } ? { [K in keyof T_1]: Parameters; } : never; }; }; - export default _default; -+ -+ -+//// [DtsFileErrors] -+ -+ -+reexport.d.ts(5,88): error TS2344: Type 'T["x"][K]' does not satisfy the constraint '(...args: any) => any'. -+ Type 'T["x"][keyof T_1]' is not assignable to type '(...args: any) => any'. -+ Type 'T["x"][string] | T["x"][number] | T["x"][symbol]' is not assignable to type '(...args: any) => any'. -+ Type 'T["x"][string]' is not assignable to type '(...args: any) => any'. -+ -+ -+==== types.d.ts (0 errors) ==== -+ type Fns = Record unknown>; -+ type Map = { -+ [K in keyof T]: T[K]; -+ }; -+ type AllArg = { -+ [K in keyof T]: Parameters; -+ }; -+ declare function fn; -+ }>(sliceIndex: T): AllArg; -+ declare const _default: { -+ fn: typeof fn; -+ }; -+ export default _default; -+ -+==== reexport.d.ts (1 errors) ==== -+ declare const _default: { -+ test: { -+ fn: (sliceIndex: T) => T["x"] extends infer T_1 ? { [K in keyof T_1]: Parameters; } : never; -+ ~~~~~~~~~ -+!!! error TS2344: Type 'T["x"][K]' does not satisfy the constraint '(...args: any) => any'. -+!!! error TS2344: Type 'T["x"][keyof T_1]' is not assignable to type '(...args: any) => any'. -+!!! error TS2344: Type 'T["x"][string] | T["x"][number] | T["x"][symbol]' is not assignable to type '(...args: any) => any'. -+!!! error TS2344: Type 'T["x"][string]' is not assignable to type '(...args: any) => any'. -+ }; -+ }; -+ export default _default; -+ \ No newline at end of file + export default _default; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.types b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.types index 96e4a14d96..b9a7cdfcae 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.types +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.types @@ -26,9 +26,9 @@ export default { fn }; === reexport.ts === import test from "./types"; ->test : { fn: (sliceIndex: T) => T["x"] extends infer T_1 ? { [K in keyof T_1]: Parameters; } : never; } +>test : { fn: unknown; } ? { [K in keyof T_1]: T["x"][K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_1 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K in keyof T_1]: Parameters; } : never; } export default { test }; ->{ test } : { test: { fn: (sliceIndex: T) => T["x"] extends infer T_1 ? { [K in keyof T_1]: Parameters; } : never; }; } ->test : { fn: (sliceIndex: T) => T["x"] extends infer T_1 ? { [K in keyof T_1]: Parameters; } : never; } +>{ test } : { test: { fn: unknown; } ? { [K in keyof T_1]: T["x"][K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_1 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K in keyof T_1]: Parameters; } : never; }; } +>test : { fn: unknown; } ? { [K in keyof T_1]: T["x"][K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_1 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K in keyof T_1]: Parameters; } : never; } diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.types.diff b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.types.diff index edf2249aa7..1b71974e57 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.types.diff +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.types.diff @@ -5,10 +5,10 @@ === reexport.ts === import test from "./types"; ->test : { fn: unknown; } ? { [K in keyof T_1]: T_1[K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_2 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K_1 in keyof T_2]: Parameters; } : never; } -+>test : { fn: (sliceIndex: T) => T["x"] extends infer T_1 ? { [K in keyof T_1]: Parameters; } : never; } ++>test : { fn: unknown; } ? { [K in keyof T_1]: T["x"][K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_1 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K in keyof T_1]: Parameters; } : never; } export default { test }; ->{ test } : { test: { fn: unknown; } ? { [K in keyof T_1]: T_1[K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_2 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K_1 in keyof T_2]: Parameters; } : never; }; } ->test : { fn: unknown; } ? { [K in keyof T_1]: T_1[K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_2 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K_1 in keyof T_2]: Parameters; } : never; } -+>{ test } : { test: { fn: (sliceIndex: T) => T["x"] extends infer T_1 ? { [K in keyof T_1]: Parameters; } : never; }; } -+>test : { fn: (sliceIndex: T) => T["x"] extends infer T_1 ? { [K in keyof T_1]: Parameters; } : never; } ++>{ test } : { test: { fn: unknown; } ? { [K in keyof T_1]: T["x"][K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_1 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K in keyof T_1]: Parameters; } : never; }; } ++>test : { fn: unknown; } ? { [K in keyof T_1]: T["x"][K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_1 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K in keyof T_1]: Parameters; } : never; } diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js index 8ec1b82955..4450bcb490 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js @@ -94,7 +94,7 @@ export declare type ZodRawShape = { }; export declare const buildSchema: (version: V) => addQuestionMarks; -}>, undefined extends V ? never : "version"> extends infer T extends unknown ? { [k in keyof T]: addQuestionMarks, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; }>, undefined extends V ? never : "version">[k]; } : never; type evaluate = { @@ -104,15 +104,15 @@ export type entryOf = evaluate<{ [k in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o]>; export type entriesOf = evaluate[]>; -export declare const entriesOf: (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[]; +export declare const entriesOf: (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[]; export {}; //// [DtsFileErrors] -declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts(24,98): error TS2536: Type 'k' cannot be used to index type 'addQuestionMarks; }>, undefined extends V ? never : "version">'. -declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts(34,226): error TS2536: Type 'k' cannot be used to index type '{ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o]'. +declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts(24,82): error TS2536: Type 'k' cannot be used to index type 'addQuestionMarks; }>, undefined extends V ? never : "version">'. +declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts(34,210): error TS2536: Type 'k' cannot be used to index type '{ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o]'. ==== declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts (2 errors) ==== @@ -139,8 +139,8 @@ declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts(34,226): error TS }; export declare const buildSchema: (version: V) => addQuestionMarks; - }>, undefined extends V ? never : "version"> extends infer T extends unknown ? { [k in keyof T]: addQuestionMarks, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; ~~~~~~~~~~~~~~~~~~~~~~~~~~~ }>, undefined extends V ? never : "version">[k]; } : never; @@ -153,8 +153,8 @@ declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts(34,226): error TS [k in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o]>; export type entriesOf = evaluate[]>; - export declare const entriesOf: (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[]; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + export declare const entriesOf: (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[]; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2536: Type 'k' cannot be used to index type '{ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o]'. export {}; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js.diff b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js.diff index 4cdbbcd494..3651005a53 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js.diff +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js.diff @@ -21,7 +21,7 @@ -}>; +export declare const buildSchema: (version: V) => addQuestionMarks; -+}>, undefined extends V ? never : "version"> extends infer T extends unknown ? { [k in keyof T]: addQuestionMarks, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; +}>, undefined extends V ? never : "version">[k]; } : never; type evaluate = { @@ -32,15 +32,15 @@ }[o extends readonly unknown[] ? keyof o & number : keyof o]>; export type entriesOf = evaluate[]>; -export declare const entriesOf: (o: o) => entriesOf; -+export declare const entriesOf: (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[]; ++export declare const entriesOf: (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[]; export {}; + + +//// [DtsFileErrors] + + -+declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts(24,98): error TS2536: Type 'k' cannot be used to index type 'addQuestionMarks; }>, undefined extends V ? never : "version">'. -+declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts(34,226): error TS2536: Type 'k' cannot be used to index type '{ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o]'. ++declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts(24,82): error TS2536: Type 'k' cannot be used to index type 'addQuestionMarks; }>, undefined extends V ? never : "version">'. ++declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts(34,210): error TS2536: Type 'k' cannot be used to index type '{ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o]'. + + +==== declarationEmitMappedTypePreservesTypeParameterConstraint.d.ts (2 errors) ==== @@ -67,8 +67,8 @@ + }; + export declare const buildSchema: (version: V) => addQuestionMarks; -+ }>, undefined extends V ? never : "version"> extends infer T extends unknown ? { [k in keyof T]: addQuestionMarks, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + }>, undefined extends V ? never : "version">[k]; } : never; @@ -81,8 +81,8 @@ + [k in keyof o]-?: [k, o[k] & ({} | null)]; + }[o extends readonly unknown[] ? keyof o & number : keyof o]>; + export type entriesOf = evaluate[]>; -+ export declare const entriesOf: (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[]; -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ export declare const entriesOf: (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[]; ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2536: Type 'k' cannot be used to index type '{ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o]'. + export {}; + \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types index e9a054ef2c..d70877287d 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types @@ -46,7 +46,7 @@ export declare type baseObjectOutputType = { }; export declare type objectOutputType = flatten< ->objectOutputType : addQuestionMarks, requiredKeys>> extends infer T extends unknown ? { [k in keyof T]: addQuestionMarks, requiredKeys>>[k]; } : never +>objectOutputType : addQuestionMarks, requiredKeys>> extends infer T ? { [k in keyof T]: addQuestionMarks, requiredKeys>>[k]; } : never addQuestionMarks> >; @@ -60,8 +60,8 @@ export declare type ZodRawShape = { }; export const buildSchema = ( ->buildSchema : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T extends unknown ? { [k in keyof T]: addQuestionMarks; }>, undefined extends V ? never : "version">[k]; } : never ->( version: V): objectOutputType<{ version: ZodLiteral;}> => ({} as any) : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T extends unknown ? { [k in keyof T]: addQuestionMarks; }>, undefined extends V ? never : "version">[k]; } : never +>buildSchema : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; }>, undefined extends V ? never : "version">[k]; } : never +>( version: V): objectOutputType<{ version: ZodLiteral;}> => ({} as any) : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; }>, undefined extends V ? never : "version">[k]; } : never version: V >version : V @@ -81,7 +81,7 @@ type evaluate = { [k in keyof t]: t[k] } & unknown >evaluate : { [k in keyof t]: t[k]; } export type entryOf = evaluate< ->entryOf : { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never +>entryOf : { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never { [k in keyof o]-?: [k, o[k] & ({} | null)] }[o extends readonly unknown[] ? keyof o & number @@ -89,15 +89,15 @@ export type entryOf = evaluate< > export type entriesOf = evaluate[]> ->entriesOf : ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] +>entriesOf : ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] export const entriesOf = (o: o) => ->entriesOf : (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] ->(o: o) => Object.entries(o) as entriesOf : (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] +>entriesOf : (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] +>(o: o) => Object.entries(o) as entriesOf : (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] >o : o Object.entries(o) as entriesOf ->Object.entries(o) as entriesOf : ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] +>Object.entries(o) as entriesOf : ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] >Object.entries(o) : [string, any][] >Object.entries : { (o: ArrayLike | { [s: string]: T; }): [string, T][]; (o: {}): [string, any][]; } >Object : ObjectConstructor diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types.diff b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types.diff index 7e05817ad6..f5c8104ad2 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types.diff +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types.diff @@ -5,7 +5,7 @@ export declare type objectOutputType = flatten< ->objectOutputType : addQuestionMarks, requiredKeys>> extends infer T ? { [k in keyof T]: T[k]; } : never -+>objectOutputType : addQuestionMarks, requiredKeys>> extends infer T extends unknown ? { [k in keyof T]: addQuestionMarks, requiredKeys>>[k]; } : never ++>objectOutputType : addQuestionMarks, requiredKeys>> extends infer T ? { [k in keyof T]: addQuestionMarks, requiredKeys>>[k]; } : never addQuestionMarks> >; @@ -15,8 +15,8 @@ export const buildSchema = ( ->buildSchema : (version: V) => objectOutputType<{ version: ZodLiteral; }> ->( version: V): objectOutputType<{ version: ZodLiteral;}> => ({} as any) : (version: V) => objectOutputType<{ version: ZodLiteral; }> -+>buildSchema : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T extends unknown ? { [k in keyof T]: addQuestionMarks; }>, undefined extends V ? never : "version">[k]; } : never -+>( version: V): objectOutputType<{ version: ZodLiteral;}> => ({} as any) : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T extends unknown ? { [k in keyof T]: addQuestionMarks; }>, undefined extends V ? never : "version">[k]; } : never ++>buildSchema : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; }>, undefined extends V ? never : "version">[k]; } : never ++>( version: V): objectOutputType<{ version: ZodLiteral;}> => ({} as any) : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; }>, undefined extends V ? never : "version">[k]; } : never version: V >version : V @@ -25,7 +25,7 @@ export type entryOf = evaluate< ->entryOf : { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[k]; } : never -+>entryOf : { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never ++>entryOf : { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never { [k in keyof o]-?: [k, o[k] & ({} | null)] }[o extends readonly unknown[] ? keyof o & number @@ -34,18 +34,18 @@ export type entriesOf = evaluate[]> ->entriesOf : ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[k]; } : never)[] -+>entriesOf : ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] ++>entriesOf : ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] export const entriesOf = (o: o) => ->entriesOf : (o: o) => entriesOf ->(o: o) => Object.entries(o) as entriesOf : (o: o) => entriesOf -+>entriesOf : (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] -+>(o: o) => Object.entries(o) as entriesOf : (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] ++>entriesOf : (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] ++>(o: o) => Object.entries(o) as entriesOf : (o: o) => ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] >o : o Object.entries(o) as entriesOf ->Object.entries(o) as entriesOf : ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[k]; } : never)[] -+>Object.entries(o) as entriesOf : ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T extends unknown ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] ++>Object.entries(o) as entriesOf : ({ [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: { [k_1 in keyof o]-?: [k_1, o[k_1] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o][k]; } : never)[] >Object.entries(o) : [string, any][] ->Object.entries : { (o: { [s: string]: T; } | ArrayLike): [string, T][]; (o: {}): [string, any][]; } +>Object.entries : { (o: ArrayLike | { [s: string]: T; }): [string, T][]; (o: {}): [string, any][]; } diff --git a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js index d7fb45fc72..b4091a3718 100644 --- a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js +++ b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js @@ -29,4 +29,4 @@ type PrivateMapped = { }; export {}; //// [api.d.ts] -export declare const mappedUnionWithPrivateType: (...args: T) => T[any] extends infer T_1 extends unknown ? { [K in keyof T_1]: T[any][K]; } : never; +export declare const mappedUnionWithPrivateType: (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T[any][K]; } : never; diff --git a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js.diff b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js.diff index 5b9b7e6c6f..e3d621bc44 100644 --- a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js.diff +++ b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js.diff @@ -14,4 +14,4 @@ export {}; //// [api.d.ts] -export declare const mappedUnionWithPrivateType: (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never; -+export declare const mappedUnionWithPrivateType: (...args: T) => T[any] extends infer T_1 extends unknown ? { [K in keyof T_1]: T[any][K]; } : never; \ No newline at end of file ++export declare const mappedUnionWithPrivateType: (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T[any][K]; } : never; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types index 51a3a89371..2ea3dde29a 100644 --- a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types +++ b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types @@ -10,14 +10,14 @@ type PrivateMapped = {[K in keyof Obj]: Obj[K]}; === api.ts === import {usePrivateType} from './internal'; ->usePrivateType : (...args: T) => T[any] extends infer T_1 extends unknown ? { [K in keyof T_1]: T[any][K]; } : never +>usePrivateType : (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T[any][K]; } : never export const mappedUnionWithPrivateType = (...args: T) => usePrivateType(...args); ->mappedUnionWithPrivateType : (...args: T) => T[any] extends infer T_1 extends unknown ? { [K in keyof T_1]: T[any][K]; } : never ->(...args: T) => usePrivateType(...args) : (...args: T) => T[any] extends infer T_1 extends unknown ? { [K in keyof T_1]: T[any][K]; } : never +>mappedUnionWithPrivateType : (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T[any][K]; } : never +>(...args: T) => usePrivateType(...args) : (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T[any][K]; } : never >args : T ->usePrivateType(...args) : T_1[any] extends infer T extends unknown ? { [K in keyof T]: T_1[any][K]; } : never ->usePrivateType : (...args: T_1) => T_3[any] extends infer T_2 extends unknown ? { [K in keyof T_2]: T_3[any][K]; } : never +>usePrivateType(...args) : T_1[any] extends infer T ? { [K in keyof T]: T_1[any][K]; } : never +>usePrivateType : (...args: T_1) => T_3[any] extends infer T_2 ? { [K in keyof T_2]: T_3[any][K]; } : never >...args : unknown >args : T diff --git a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types.diff b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types.diff index 0ad381275c..0ebc8aeaaa 100644 --- a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types.diff +++ b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types.diff @@ -5,17 +5,17 @@ === api.ts === import {usePrivateType} from './internal'; ->usePrivateType : (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never -+>usePrivateType : (...args: T) => T[any] extends infer T_1 extends unknown ? { [K in keyof T_1]: T[any][K]; } : never ++>usePrivateType : (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T[any][K]; } : never export const mappedUnionWithPrivateType = (...args: T) => usePrivateType(...args); ->mappedUnionWithPrivateType : (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never ->(...args: T) => usePrivateType(...args) : (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never -+>mappedUnionWithPrivateType : (...args: T) => T[any] extends infer T_1 extends unknown ? { [K in keyof T_1]: T[any][K]; } : never -+>(...args: T) => usePrivateType(...args) : (...args: T) => T[any] extends infer T_1 extends unknown ? { [K in keyof T_1]: T[any][K]; } : never ++>mappedUnionWithPrivateType : (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T[any][K]; } : never ++>(...args: T) => usePrivateType(...args) : (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T[any][K]; } : never >args : T ->usePrivateType(...args) : T[any] extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never ->usePrivateType : (...args: T_1) => T_1[any] extends infer T_2 ? { [K in keyof T_2]: T_2[K]; } : never -+>usePrivateType(...args) : T_1[any] extends infer T extends unknown ? { [K in keyof T]: T_1[any][K]; } : never -+>usePrivateType : (...args: T_1) => T_3[any] extends infer T_2 extends unknown ? { [K in keyof T_2]: T_3[any][K]; } : never ++>usePrivateType(...args) : T_1[any] extends infer T ? { [K in keyof T]: T_1[any][K]; } : never ++>usePrivateType : (...args: T_1) => T_3[any] extends infer T_2 ? { [K in keyof T_2]: T_3[any][K]; } : never >...args : unknown >args : T diff --git a/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter1.types b/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter1.types index 67e047e445..4e1fd17f5a 100644 --- a/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter1.types +++ b/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter1.types @@ -26,7 +26,7 @@ type Prettify = { [K in keyof T]: T[K] } & {}; >Prettify : { [K in keyof T]: T[K]; } type InferObjectType = Prettify< ->InferObjectType : { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; } extends infer T extends unknown ? { [K in keyof T]: ({ [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; })[K]; } : never +>InferObjectType : { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; } extends infer T ? { [K in keyof T]: ({ [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; })[K]; } : never { [k in keyof Shape as Shape[k] extends { optional: "true" } >optional : "true" @@ -46,7 +46,7 @@ interface ZodObject extends ZodType { >optional : "false" output: InferObjectType; ->output : { [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; } extends infer T_1 extends unknown ? { [K in keyof T_1]: ({ [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; })[K]; } : never +>output : { [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; } extends infer T_1 ? { [K in keyof T_1]: ({ [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; })[K]; } : never } interface ZodOptional extends ZodType { diff --git a/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter1.types.diff b/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter1.types.diff index a16f8426b8..56684719d2 100644 --- a/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter1.types.diff +++ b/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter1.types.diff @@ -5,7 +5,7 @@ type InferObjectType = Prettify< ->InferObjectType : { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k_1 in keyof Shape as Shape[k_1] extends { optional: "true"; } ? never : k_1]: Shape[k_1]["output"]; } extends infer T ? { [K in keyof T]: T[K]; } : never -+>InferObjectType : { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; } extends infer T extends unknown ? { [K in keyof T]: ({ [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; })[K]; } : never ++>InferObjectType : { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; } extends infer T ? { [K in keyof T]: ({ [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; })[K]; } : never { [k in keyof Shape as Shape[k] extends { optional: "true" } >optional : "true" @@ -14,7 +14,7 @@ output: InferObjectType; ->output : { [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k_1 in keyof T as T[k_1] extends { optional: "true"; } ? never : k_1]: T[k_1]["output"]; } extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never -+>output : { [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; } extends infer T_1 extends unknown ? { [K in keyof T_1]: ({ [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; })[K]; } : never ++>output : { [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; } extends infer T_1 ? { [K in keyof T_1]: ({ [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; })[K]; } : never } interface ZodOptional extends ZodType { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter2.types b/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter2.types index 2349927427..80022ff103 100644 --- a/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter2.types +++ b/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter2.types @@ -24,7 +24,7 @@ type Prettify = { [K in keyof T]: T[K] } & {}; >Prettify : { [K in keyof T]: T[K]; } type InferObjectType = Prettify< ->InferObjectType : { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; } extends infer T extends unknown ? { [K in keyof T]: ({ [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; })[K]; } : never +>InferObjectType : { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; } extends infer T ? { [K in keyof T]: ({ [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; })[K]; } : never { [k in keyof Shape as Shape[k] extends { optional: "true" } >optional : "true" @@ -44,7 +44,7 @@ interface ZodObject extends ZodType { >optional : "false" output: InferObjectType; ->output : { [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; } extends infer T_1 extends unknown ? { [K in keyof T_1]: ({ [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; })[K]; } : never +>output : { [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; } extends infer T_1 ? { [K in keyof T_1]: ({ [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; })[K]; } : never } interface ZodOptional extends ZodType { diff --git a/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter2.types.diff b/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter2.types.diff index ebf06f4579..565d6ff3b5 100644 --- a/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter2.types.diff +++ b/testdata/baselines/reference/submodule/compiler/noCircularitySelfReferentialGetter2.types.diff @@ -5,7 +5,7 @@ type InferObjectType = Prettify< ->InferObjectType : { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k_1 in keyof Shape as Shape[k_1] extends { optional: "true"; } ? never : k_1]: Shape[k_1]["output"]; } extends infer T ? { [K in keyof T]: T[K]; } : never -+>InferObjectType : { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; } extends infer T extends unknown ? { [K in keyof T]: ({ [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; })[K]; } : never ++>InferObjectType : { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; } extends infer T ? { [K in keyof T]: ({ [k in keyof Shape as Shape[k] extends { optional: "true"; } ? k : never]?: Shape[k]["output"] | undefined; } & { [k in keyof Shape as Shape[k] extends { optional: "true"; } ? never : k]: Shape[k]["output"]; })[K]; } : never { [k in keyof Shape as Shape[k] extends { optional: "true" } >optional : "true" @@ -14,7 +14,7 @@ output: InferObjectType; ->output : { [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k_1 in keyof T as T[k_1] extends { optional: "true"; } ? never : k_1]: T[k_1]["output"]; } extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never -+>output : { [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; } extends infer T_1 extends unknown ? { [K in keyof T_1]: ({ [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; })[K]; } : never ++>output : { [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; } extends infer T_1 ? { [K in keyof T_1]: ({ [k in keyof T as T[k] extends { optional: "true"; } ? k : never]?: T[k]["output"] | undefined; } & { [k in keyof T as T[k] extends { optional: "true"; } ? never : k]: T[k]["output"]; })[K]; } : never } interface ZodOptional extends ZodType { \ No newline at end of file