diff --git a/internal/checker/nodebuilderimpl.go b/internal/checker/nodebuilderimpl.go index 170ba9cca8..21cc1b67b6 100644 --- a/internal/checker/nodebuilderimpl.go +++ b/internal/checker/nodebuilderimpl.go @@ -1367,6 +1367,8 @@ func (b *nodeBuilderImpl) createMappedTypeNodeFromType(t *Type) *ast.TypeNode { } var appropriateConstraintTypeNode *ast.Node var newTypeVariable *ast.Node + templateType := b.ch.getTemplateTypeFromMappedType(t) + typeParameter := b.ch.getTypeParameterFromMappedType(t) // If the mapped type isn't `keyof` constraint-declared, _but_ still has modifiers preserved, and its naive instantiation won't preserve modifiers because its constraint isn't `keyof` constrained, we have work to do needsModifierPreservingWrapper := !b.ch.isMappedTypeWithKeyofConstraintDeclaration(t) && @@ -1374,18 +1376,17 @@ func (b *nodeBuilderImpl) createMappedTypeNodeFromType(t *Type) *ast.TypeNode { b.ctx.flags&nodebuilder.FlagsGenerateNamesForShadowedTypeParams != 0 && !(b.ch.getConstraintTypeFromMappedType(t).flags&TypeFlagsTypeParameter != 0 && b.ch.getConstraintOfTypeParameter(b.ch.getConstraintTypeFromMappedType(t)).flags&TypeFlagsIndex != 0) - cleanup := b.enterNewScope(mapped.declaration.AsNode(), nil, []*Type{b.ch.getTypeParameterFromMappedType(t)}, nil, nil) - defer cleanup() - if b.ch.isMappedTypeWithKeyofConstraintDeclaration(t) { // We have a { [P in keyof T]: X } // We do this to ensure we retain the toplevel keyof-ness of the type which may be lost due to keyof distribution during `getConstraintTypeFromMappedType` if b.ctx.flags&nodebuilder.FlagsGenerateNamesForShadowedTypeParams != 0 && b.isHomomorphicMappedTypeWithNonHomomorphicInstantiation(mapped) { - newParam := b.ch.newTypeParameter( + newConstraintParam := b.ch.newTypeParameter( b.ch.newSymbol(ast.SymbolFlagsTypeParameter, "T"), ) - name := b.typeParameterToName(newParam) + name := b.typeParameterToName(newConstraintParam) + target := t.Target() newTypeVariable = b.f.NewTypeReferenceNode(name.AsNode(), nil) + templateType = b.ch.instantiateType(b.ch.getTemplateTypeFromMappedType(target), newTypeMapper([]*Type{b.ch.getTypeParameterFromMappedType(target), b.ch.getModifiersTypeFromMappedType(target)}, []*Type{typeParameter, newConstraintParam})) } indexTarget := newTypeVariable if indexTarget == nil { @@ -1405,15 +1406,18 @@ func (b *nodeBuilderImpl) createMappedTypeNodeFromType(t *Type) *ast.TypeNode { appropriateConstraintTypeNode = b.typeToTypeNode(b.ch.getConstraintTypeFromMappedType(t)) } - typeParameterNode := b.typeParameterToDeclarationWithConstraint(b.ch.getTypeParameterFromMappedType(t), appropriateConstraintTypeNode) + // nameType and templateType nodes have to be in the new scope + cleanup := b.enterNewScope(mapped.declaration.AsNode(), nil, []*Type{b.ch.getTypeParameterFromMappedType(t)}, nil, nil) + typeParameterNode := b.typeParameterToDeclarationWithConstraint(typeParameter, appropriateConstraintTypeNode) var nameTypeNode *ast.Node if mapped.declaration.NameType != nil { nameTypeNode = b.typeToTypeNode(b.ch.getNameTypeFromMappedType(t)) } templateTypeNode := b.typeToTypeNode(b.ch.removeMissingType( - b.ch.getTemplateTypeFromMappedType(t), + templateType, getMappedTypeModifiers(t)&MappedTypeModifiersIncludeOptional != 0, )) + cleanup() result := b.f.NewMappedTypeNode( readonlyToken, typeParameterNode, diff --git a/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types b/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types index 441c9fb3a5..fac9a0142b 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] extends infer T ? { [K_1 in keyof T]: A[K][K_1] extends infer T_1 ? { [K_2 in keyof T_1]: A[K][K_1][K_2] extends infer T_2 ? { [K_3 in keyof T_2]: A[K][K_1][K_2][K_3] extends infer T_3 ? { [K_4 in keyof T_3]: A[K][K_1][K_2][K_3][K_4] extends infer T_4 ? { [K_5 in keyof T_4]: A[K][K_1][K_2][K_3][K_4][K_5] extends infer T_5 ? { [K_6 in keyof T_5]: A[K][K_1][K_2][K_3][K_4][K_5][K_6] extends infer T_6 ? { [K_7 in keyof T_6]: A[K][K_1][K_2][K_3][K_4][K_5][K_6][K_7] extends infer T_7 ? { [K_8 in keyof T_7]: A[K][K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8] extends infer T_8 ? { [K_9 in keyof T_8]: A[K][K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_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] 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; } 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 deleted file mode 100644 index a785dedc2a..0000000000 --- a/testdata/baselines/reference/submodule/compiler/computedTypesKeyofNoIndexSignatureType.types.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.computedTypesKeyofNoIndexSignatureType.types -+++ new.computedTypesKeyofNoIndexSignatureType.types -@@= skipped -1, +1 lines =@@ - - === 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] extends infer T ? { [K_1 in keyof T]: A[K][K_1] extends infer T_1 ? { [K_2 in keyof T_1]: A[K][K_1][K_2] extends infer T_2 ? { [K_3 in keyof T_2]: A[K][K_1][K_2][K_3] extends infer T_3 ? { [K_4 in keyof T_3]: A[K][K_1][K_2][K_3][K_4] extends infer T_4 ? { [K_5 in keyof T_4]: A[K][K_1][K_2][K_3][K_4][K_5] extends infer T_5 ? { [K_6 in keyof T_5]: A[K][K_1][K_2][K_3][K_4][K_5][K_6] extends infer T_6 ? { [K_7 in keyof T_6]: A[K][K_1][K_2][K_3][K_4][K_5][K_6][K_7] extends infer T_7 ? { [K_8 in keyof T_7]: A[K][K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8] extends infer T_8 ? { [K_9 in keyof T_8]: A[K][K_1][K_2][K_3][K_4][K_5][K_6][K_7][K_8][K_9] extends infer T_9 ? { [K_10 in keyof T_9]: 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 251410e062..62c571420a 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js @@ -52,10 +52,10 @@ declare const _default: { fn: unknown; - } ? { [K in keyof T_1]: T["x"][K]; } : never; - }>(sliceIndex: T) => T["x"] extends infer T_1 extends { + } ? { [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]: Parameters; } : never; + } ? { [K in keyof T_2]: Parameters; } : never; }; }; export default _default; diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js.diff b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js.diff index 180b1f2c78..42e8128dfa 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js.diff +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.js.diff @@ -9,17 +9,12 @@ exports.default = { test: types_1.default }; -@@= skipped -25, +25 lines =@@ - fn: unknown; -- } ? { [K in keyof T_1]: T_1[K]; } : never; -- }>(sliceIndex: T) => T["x"] extends infer T_2 extends { -+ } ? { [K in keyof T_1]: T["x"][K]; } : never; -+ }>(sliceIndex: T) => T["x"] extends infer T_1 extends { +@@= skipped -28, +28 lines =@@ + } ? { [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; -+ } ? { [K in keyof T_1]: Parameters; } : never; ++ } ? { [K in keyof T_2]: Parameters; } : never; }; }; 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 b9a7cdfcae..a8a5ea57ec 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: 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_1[K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_2 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K in keyof T_2]: Parameters; } : never; } export default { test }; ->{ 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; } +>{ 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 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 in keyof T_2]: Parameters; } : never; } diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.types.diff b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeDistributivityPreservesConstraints.types.diff index 1b71974e57..5e519d4701 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: 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_1[K]; } : never; }>(sliceIndex: T) => T["x"] extends infer T_2 extends { [x: string]: (...params: unknown[]) => unknown; } ? { [K in keyof T_2]: 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: 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; } ++>{ 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 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 in keyof T_2]: Parameters; } : never; } diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js index 4450bcb490..43466056a4 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js @@ -94,9 +94,7 @@ export declare type ZodRawShape = { }; export declare const buildSchema: (version: V) => addQuestionMarks; -}>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; -}>, undefined extends V ? never : "version">[k]; } : never; +}>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: T[k]; } : never; type evaluate = { [k in keyof t]: t[k]; } & unknown; @@ -104,57 +102,5 @@ 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 ? { [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 in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[k]; } : never)[]; export {}; - - -//// [DtsFileErrors] - - -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) ==== - declare type requiredKeys = { - [k in keyof T]: undefined extends T[k] ? never : k; - }[keyof T]; - declare type addQuestionMarks> = Pick, R> & Partial; - declare type identity = T; - declare type flatten = identity<{ - [k in keyof T]: T[k]; - }>; - export declare abstract class ZodType { - readonly _output: Output; - } - export declare class ZodLiteral extends ZodType { - } - export declare type ZodTypeAny = ZodType; - export declare type baseObjectOutputType = { - [k in keyof Shape]: Shape[k]["_output"]; - }; - export declare type objectOutputType = flatten>>; - export declare type ZodRawShape = { - [k: string]: ZodTypeAny; - }; - export declare const buildSchema: (version: V) => addQuestionMarks; - }>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - }>, undefined extends V ? never : "version">[k]; } : never; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2536: Type 'k' cannot be used to index type 'addQuestionMarks; }>, undefined extends V ? never : "version">'. - type evaluate = { - [k in keyof t]: t[k]; - } & unknown; - 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 ? { [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 3651005a53..90819e98d3 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js.diff +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.js.diff @@ -17,72 +17,17 @@ [k: string]: ZodTypeAny; }; -export declare const buildSchema: (version: V) => objectOutputType<{ -- version: ZodLiteral; --}>; +export declare const 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: ZodLiteral; +-}>; ++}>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: T[k]; } : never; type evaluate = { [k in keyof t]: t[k]; } & unknown; -@@= skipped -10, +12 lines =@@ +@@= skipped -10, +10 lines =@@ [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) => 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 ? { [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,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) ==== -+ declare type requiredKeys = { -+ [k in keyof T]: undefined extends T[k] ? never : k; -+ }[keyof T]; -+ declare type addQuestionMarks> = Pick, R> & Partial; -+ declare type identity = T; -+ declare type flatten = identity<{ -+ [k in keyof T]: T[k]; -+ }>; -+ export declare abstract class ZodType { -+ readonly _output: Output; -+ } -+ export declare class ZodLiteral extends ZodType { -+ } -+ export declare type ZodTypeAny = ZodType; -+ export declare type baseObjectOutputType = { -+ [k in keyof Shape]: Shape[k]["_output"]; -+ }; -+ export declare type objectOutputType = flatten>>; -+ export declare type ZodRawShape = { -+ [k: string]: ZodTypeAny; -+ }; -+ export declare const buildSchema: (version: V) => addQuestionMarks; -+ }>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: addQuestionMarks; -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+ }>, undefined extends V ? never : "version">[k]; } : never; -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+!!! error TS2536: Type 'k' cannot be used to index type 'addQuestionMarks; }>, undefined extends V ? never : "version">'. -+ type evaluate = { -+ [k in keyof t]: t[k]; -+ } & unknown; -+ 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 ? { [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 ++export declare const entriesOf: (o: o) => ({ [k in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[k]; } : never)[]; + 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 d70877287d..71e84cd1c4 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 ? { [k in keyof T]: addQuestionMarks, requiredKeys>>[k]; } : never +>objectOutputType : addQuestionMarks, requiredKeys>> extends infer T ? { [k in keyof T]: T[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 ? { [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 +>buildSchema : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: T[k]; } : never +>( version: V): objectOutputType<{ version: ZodLiteral;}> => ({} as any) : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: T[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 ? { [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 in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[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 ? { [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 in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[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 ? { [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)[] +>entriesOf : (o: o) => ({ [k in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[k]; } : never)[] +>(o: o) => Object.entries(o) as entriesOf : (o: o) => ({ [k in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[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]: { [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 in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[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 f5c8104ad2..0bd36214a9 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types.diff +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypePreservesTypeParameterConstraint.types.diff @@ -1,22 +1,13 @@ --- old.declarationEmitMappedTypePreservesTypeParameterConstraint.types +++ new.declarationEmitMappedTypePreservesTypeParameterConstraint.types -@@= skipped -45, +45 lines =@@ - }; - - export declare type objectOutputType = flatten< -->objectOutputType : addQuestionMarks, requiredKeys>> extends infer T ? { [k in keyof T]: T[k]; } : never -+>objectOutputType : addQuestionMarks, requiredKeys>> extends infer T ? { [k in keyof T]: addQuestionMarks, requiredKeys>>[k]; } : never - - addQuestionMarks> - >; -@@= skipped -14, +14 lines =@@ +@@= skipped -59, +59 lines =@@ }; 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 ? { [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 ++>buildSchema : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: T[k]; } : never ++>( version: V): objectOutputType<{ version: ZodLiteral;}> => ({} as any) : (version: V) => addQuestionMarks; }>, undefined extends V ? never : "version"> extends infer T ? { [k in keyof T]: T[k]; } : never version: V >version : V @@ -25,7 +16,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 ? { [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 in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[k]; } : never { [k in keyof o]-?: [k, o[k] & ({} | null)] }[o extends readonly unknown[] ? keyof o & number @@ -34,18 +25,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 ? { [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 in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[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 ? { [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)[] ++>entriesOf : (o: o) => ({ [k in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[k]; } : never)[] ++>(o: o) => Object.entries(o) as entriesOf : (o: o) => ({ [k in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[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 ? { [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 in keyof o]-?: [k, o[k] & ({} | null)]; }[o extends readonly unknown[] ? keyof o & number : keyof o] extends infer T ? { [k in keyof T]: T[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/inlineMappedTypeModifierDeclarationEmit.js b/testdata/baselines/reference/submodule/compiler/inlineMappedTypeModifierDeclarationEmit.js index 4e74e29b74..33dc5af869 100644 --- a/testdata/baselines/reference/submodule/compiler/inlineMappedTypeModifierDeclarationEmit.js +++ b/testdata/baselines/reference/submodule/compiler/inlineMappedTypeModifierDeclarationEmit.js @@ -71,7 +71,7 @@ export declare function test1(obj: T, k: K): OmitReal export declare function test2(obj: T, k: K): OmitUnveiled; export {}; //// [index.d.ts] -export declare function wrappedTest1(obj: T, k: K): Exclude extends infer T extends keyof T_1 ? { [P in T]: T_1[P]; } : never; +export declare function wrappedTest1(obj: T, k: K): Exclude extends infer T_1 extends keyof T ? { [P in T_1]: T[P]; } : never; export declare function wrappedTest2(obj: T, k: K): { [P in Exclude]: T[P]; }; export type Obj = { a: number; @@ -83,42 +83,3 @@ export declare const processedInternally1: { export declare const processedInternally2: { foo: string; }; - - -//// [DtsFileErrors] - - -index.d.ts(1,88): error TS2304: Cannot find name 'T_1'. -index.d.ts(1,126): error TS2304: Cannot find name 'T_1'. -index.d.ts(1,144): error TS2304: Cannot find name 'T_1'. - - -==== index.d.ts (3 errors) ==== - export declare function wrappedTest1(obj: T, k: K): Exclude extends infer T extends keyof T_1 ? { [P in T]: T_1[P]; } : never; - ~~~ -!!! error TS2304: Cannot find name 'T_1'. - ~~~ -!!! error TS2304: Cannot find name 'T_1'. - ~~~ -!!! error TS2304: Cannot find name 'T_1'. - export declare function wrappedTest2(obj: T, k: K): { [P in Exclude]: T[P]; }; - export type Obj = { - a: number; - readonly foo: string; - }; - export declare const processedInternally1: { - readonly foo: string; - }; - export declare const processedInternally2: { - foo: string; - }; - -==== other.d.ts (0 errors) ==== - type OmitReal = Pick>; - type OmitUnveiled = { - [P in Exclude]: T[P]; - }; - export declare function test1(obj: T, k: K): OmitReal; - export declare function test2(obj: T, k: K): OmitUnveiled; - export {}; - \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/inlineMappedTypeModifierDeclarationEmit.js.diff b/testdata/baselines/reference/submodule/compiler/inlineMappedTypeModifierDeclarationEmit.js.diff index b681d7c7c2..8a81efd1b8 100644 --- a/testdata/baselines/reference/submodule/compiler/inlineMappedTypeModifierDeclarationEmit.js.diff +++ b/testdata/baselines/reference/submodule/compiler/inlineMappedTypeModifierDeclarationEmit.js.diff @@ -8,56 +8,4 @@ +const other_1 = require("./other"); function wrappedTest1(obj, k) { return (0, other_1.test1)(obj, k); - } -@@= skipped -20, +20 lines =@@ - export declare function test2(obj: T, k: K): OmitUnveiled; - export {}; - //// [index.d.ts] --export declare function wrappedTest1(obj: T, k: K): Exclude extends infer T_1 extends keyof T ? { [P in T_1]: T[P]; } : never; -+export declare function wrappedTest1(obj: T, k: K): Exclude extends infer T extends keyof T_1 ? { [P in T]: T_1[P]; } : never; - export declare function wrappedTest2(obj: T, k: K): { [P in Exclude]: T[P]; }; - export type Obj = { - a: number; -@@= skipped -12, +12 lines =@@ - export declare const processedInternally2: { - foo: string; - }; -+ -+ -+//// [DtsFileErrors] -+ -+ -+index.d.ts(1,88): error TS2304: Cannot find name 'T_1'. -+index.d.ts(1,126): error TS2304: Cannot find name 'T_1'. -+index.d.ts(1,144): error TS2304: Cannot find name 'T_1'. -+ -+ -+==== index.d.ts (3 errors) ==== -+ export declare function wrappedTest1(obj: T, k: K): Exclude extends infer T extends keyof T_1 ? { [P in T]: T_1[P]; } : never; -+ ~~~ -+!!! error TS2304: Cannot find name 'T_1'. -+ ~~~ -+!!! error TS2304: Cannot find name 'T_1'. -+ ~~~ -+!!! error TS2304: Cannot find name 'T_1'. -+ export declare function wrappedTest2(obj: T, k: K): { [P in Exclude]: T[P]; }; -+ export type Obj = { -+ a: number; -+ readonly foo: string; -+ }; -+ export declare const processedInternally1: { -+ readonly foo: string; -+ }; -+ export declare const processedInternally2: { -+ foo: string; -+ }; -+ -+==== other.d.ts (0 errors) ==== -+ type OmitReal = Pick>; -+ type OmitUnveiled = { -+ [P in Exclude]: T[P]; -+ }; -+ export declare function test1(obj: T, k: K): OmitReal; -+ export declare function test2(obj: T, k: K): OmitUnveiled; -+ export {}; -+ \ No newline at end of file + } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js index b4091a3718..5c29d48b49 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 ? { [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_1[K]; } : never; diff --git a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js.diff b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js.diff index e3d621bc44..86079eedfc 100644 --- a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js.diff +++ b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.js.diff @@ -8,10 +8,3 @@ +const internal_1 = require("./internal"); const mappedUnionWithPrivateType = (...args) => (0, internal_1.usePrivateType)(...args); exports.mappedUnionWithPrivateType = mappedUnionWithPrivateType; - -@@= skipped -12, +12 lines =@@ - }; - 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 ? { [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 5c0d0e35ac..dda55bd4ba 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 ? { [K in keyof T_1]: T[any][K]; } : never +>usePrivateType : (...args: T) => T[any] extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never export const mappedUnionWithPrivateType = (...args: T) => usePrivateType(...args); ->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 +>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 >args : T ->usePrivateType(...args) : T_1[any] extends infer T ? { [K in keyof T]: T_1[any][K]; } : never ->usePrivateType : (...args: T_1) => T_1[any] extends infer T_2 ? { [K in keyof T_2]: T_1[any][K]; } : never +>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 >...args : unknown >args : T diff --git a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types.diff b/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types.diff deleted file mode 100644 index cf2137461b..0000000000 --- a/testdata/baselines/reference/submodule/compiler/mappedTypeGenericInstantiationPreservesHomomorphism.types.diff +++ /dev/null @@ -1,21 +0,0 @@ ---- old.mappedTypeGenericInstantiationPreservesHomomorphism.types -+++ new.mappedTypeGenericInstantiationPreservesHomomorphism.types -@@= skipped -9, +9 lines =@@ - - === 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 ? { [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 ? { [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 ? { [K in keyof T]: T_1[any][K]; } : never -+>usePrivateType : (...args: T_1) => T_1[any] extends infer T_2 ? { [K in keyof T_2]: T_1[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 4e1fd17f5a..78179c59dc 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 ? { [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]: T[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 ? { [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]: T_1[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 56684719d2..8f1ab92e19 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 ? { [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]: T[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 ? { [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]: T_1[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 80022ff103..8e326c2f2b 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 ? { [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]: T[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 ? { [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]: T_1[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 565d6ff3b5..460e4127c0 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 ? { [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]: T[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 ? { [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]: T_1[K]; } : never } interface ZodOptional extends ZodType { \ No newline at end of file