Skip to content

Commit 7dc887f

Browse files
committed
Add regression test
1 parent fc5d7e9 commit 7dc887f

File tree

5 files changed

+74
-41
lines changed

5 files changed

+74
-41
lines changed

tests/baselines/reference/mappedTypeWithAny.errors.txt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,14 @@ tests/cases/conformance/types/mapped/mappedTypeWithAny.ts(53,5): error TS2322: T
6767
let def: [any, any] = stringifyPair(void 0 as any);
6868
~~~
6969
!!! error TS2322: Type 'string[]' is not assignable to type '[any, any]'.
70-
!!! error TS2322: Target requires 2 element(s) but source may have fewer.
70+
!!! error TS2322: Target requires 2 element(s) but source may have fewer.
71+
72+
// Repro from #46582
73+
74+
export type Evolvable<E extends Evolver> = {
75+
[P in keyof E]: never;
76+
};
77+
export type Evolver<T extends Evolvable<any> = any> = {
78+
[key in keyof Partial<T>]: never;
79+
};
80+

tests/baselines/reference/mappedTypeWithAny.js

Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,21 @@ declare function stringifyArray<T extends readonly any[]>(arr: T): { -readonly [
5151
let abc: any[] = stringifyArray(void 0 as any);
5252

5353
declare function stringifyPair<T extends readonly [any, any]>(arr: T): { -readonly [K in keyof T]: string };
54-
let def: [any, any] = stringifyPair(void 0 as any);
54+
let def: [any, any] = stringifyPair(void 0 as any);
55+
56+
// Repro from #46582
57+
58+
export type Evolvable<E extends Evolver> = {
59+
[P in keyof E]: never;
60+
};
61+
export type Evolver<T extends Evolvable<any> = any> = {
62+
[key in keyof Partial<T>]: never;
63+
};
64+
5565

5666
//// [mappedTypeWithAny.js]
5767
"use strict";
68+
exports.__esModule = true;
5869
for (var id in z) {
5970
var data = z[id];
6071
var x = data.notAValue; // Error
@@ -70,43 +81,9 @@ var def = stringifyPair(void 0);
7081

7182

7283
//// [mappedTypeWithAny.d.ts]
73-
declare type Item = {
74-
value: string;
75-
};
76-
declare type ItemMap<T> = {
77-
[P in keyof T]: Item;
78-
};
79-
declare let x0: keyof any;
80-
declare let x1: {
81-
[P in any]: Item;
82-
};
83-
declare let x2: {
84-
[P in string]: Item;
85-
};
86-
declare let x3: {
87-
[P in keyof any]: Item;
88-
};
89-
declare let x4: ItemMap<any>;
90-
declare type Data = {
91-
value: string;
92-
};
93-
declare type StrictDataMap<T> = {
94-
[P in keyof T]: Data;
95-
};
96-
declare let z: StrictDataMap<any>;
97-
declare type Arrayish<T extends unknown[]> = {
98-
[K in keyof T]: T[K];
99-
};
100-
declare type Objectish<T extends unknown> = {
101-
[K in keyof T]: T[K];
102-
};
103-
declare type IndirectArrayish<U extends unknown[]> = Objectish<U>;
104-
declare function bar(arrayish: Arrayish<any>, objectish: Objectish<any>, indirectArrayish: IndirectArrayish<any>): void;
105-
declare function stringifyArray<T extends readonly any[]>(arr: T): {
106-
-readonly [K in keyof T]: string;
84+
export declare type Evolvable<E extends Evolver> = {
85+
[P in keyof E]: never;
10786
};
108-
declare let abc: any[];
109-
declare function stringifyPair<T extends readonly [any, any]>(arr: T): {
110-
-readonly [K in keyof T]: string;
87+
export declare type Evolver<T extends Evolvable<any> = any> = {
88+
[key in keyof Partial<T>]: never;
11189
};
112-
declare let def: [any, any];

tests/baselines/reference/mappedTypeWithAny.symbols

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,27 @@ let def: [any, any] = stringifyPair(void 0 as any);
151151
>def : Symbol(def, Decl(mappedTypeWithAny.ts, 52, 3))
152152
>stringifyPair : Symbol(stringifyPair, Decl(mappedTypeWithAny.ts, 49, 47))
153153

154+
// Repro from #46582
155+
156+
export type Evolvable<E extends Evolver> = {
157+
>Evolvable : Symbol(Evolvable, Decl(mappedTypeWithAny.ts, 52, 51))
158+
>E : Symbol(E, Decl(mappedTypeWithAny.ts, 56, 22))
159+
>Evolver : Symbol(Evolver, Decl(mappedTypeWithAny.ts, 58, 2))
160+
161+
[P in keyof E]: never;
162+
>P : Symbol(P, Decl(mappedTypeWithAny.ts, 57, 3))
163+
>E : Symbol(E, Decl(mappedTypeWithAny.ts, 56, 22))
164+
165+
};
166+
export type Evolver<T extends Evolvable<any> = any> = {
167+
>Evolver : Symbol(Evolver, Decl(mappedTypeWithAny.ts, 58, 2))
168+
>T : Symbol(T, Decl(mappedTypeWithAny.ts, 59, 20))
169+
>Evolvable : Symbol(Evolvable, Decl(mappedTypeWithAny.ts, 52, 51))
170+
171+
[key in keyof Partial<T>]: never;
172+
>key : Symbol(key, Decl(mappedTypeWithAny.ts, 60, 3))
173+
>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
174+
>T : Symbol(T, Decl(mappedTypeWithAny.ts, 59, 20))
175+
176+
};
177+

tests/baselines/reference/mappedTypeWithAny.types

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,3 +125,16 @@ let def: [any, any] = stringifyPair(void 0 as any);
125125
>void 0 : undefined
126126
>0 : 0
127127

128+
// Repro from #46582
129+
130+
export type Evolvable<E extends Evolver> = {
131+
>Evolvable : Evolvable<E>
132+
133+
[P in keyof E]: never;
134+
};
135+
export type Evolver<T extends Evolvable<any> = any> = {
136+
>Evolver : Evolver<T>
137+
138+
[key in keyof Partial<T>]: never;
139+
};
140+

tests/cases/conformance/types/mapped/mappedTypeWithAny.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,13 @@ declare function stringifyArray<T extends readonly any[]>(arr: T): { -readonly [
5353
let abc: any[] = stringifyArray(void 0 as any);
5454

5555
declare function stringifyPair<T extends readonly [any, any]>(arr: T): { -readonly [K in keyof T]: string };
56-
let def: [any, any] = stringifyPair(void 0 as any);
56+
let def: [any, any] = stringifyPair(void 0 as any);
57+
58+
// Repro from #46582
59+
60+
export type Evolvable<E extends Evolver> = {
61+
[P in keyof E]: never;
62+
};
63+
export type Evolver<T extends Evolvable<any> = any> = {
64+
[key in keyof Partial<T>]: never;
65+
};

0 commit comments

Comments
 (0)