Skip to content

Commit f366ae0

Browse files
committed
Add tests
1 parent f55b3ef commit f366ae0

File tree

4 files changed

+411
-0
lines changed

4 files changed

+411
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
//// [mappedTypeModifiers.ts]
2+
3+
type T = { a: number, b: string };
4+
type U = { a: number | undefined, b: string | undefined };
5+
type P = { a?: number, b?: string };
6+
type R = { readonly a: number, readonly b: string };
7+
type PR = { readonly a?: number, readonly b?: string };
8+
9+
// Validate they all have the same keys
10+
var v00: "a" | "b";
11+
var v00: keyof T;
12+
var v00: keyof U;
13+
var v00: keyof P;
14+
var v00: keyof R;
15+
var v00: keyof PR;
16+
17+
// Validate that non-isomorphic mapped types strip modifiers
18+
var v01: T;
19+
var v01: Pick<R, keyof T>;
20+
var v01: Pick<Readonly<T>, keyof T>;
21+
22+
// Validate that non-isomorphic mapped types strip modifiers
23+
var v02: U;
24+
var v02: Pick<P, keyof T>;
25+
var v02: Pick<PR, keyof T>;
26+
var v02: Pick<Partial<T>, keyof T>;
27+
var v02: Pick<Partial<Readonly<T>>, keyof T>;
28+
29+
// Validate that isomorphic mapped types preserve optional modifier
30+
var v03: P;
31+
var v03: Partial<T>;
32+
33+
// Validate that isomorphic mapped types preserve readonly modifier
34+
var v04: R;
35+
var v04: Readonly<T>;
36+
37+
// Validate that isomorphic mapped types preserve both partial and readonly modifiers
38+
var v05: PR;
39+
var v05: Partial<R>;
40+
var v05: Readonly<P>;
41+
var v05: Partial<Readonly<T>>;
42+
var v05: Readonly<Partial<T>>;
43+
44+
//// [mappedTypeModifiers.js]
45+
// Validate they all have the same keys
46+
var v00;
47+
var v00;
48+
var v00;
49+
var v00;
50+
var v00;
51+
var v00;
52+
// Validate that non-isomorphic mapped types strip modifiers
53+
var v01;
54+
var v01;
55+
var v01;
56+
// Validate that non-isomorphic mapped types strip modifiers
57+
var v02;
58+
var v02;
59+
var v02;
60+
var v02;
61+
var v02;
62+
// Validate that isomorphic mapped types preserve optional modifier
63+
var v03;
64+
var v03;
65+
// Validate that isomorphic mapped types preserve readonly modifier
66+
var v04;
67+
var v04;
68+
// Validate that isomorphic mapped types preserve both partial and readonly modifiers
69+
var v05;
70+
var v05;
71+
var v05;
72+
var v05;
73+
var v05;
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
=== tests/cases/conformance/types/mapped/mappedTypeModifiers.ts ===
2+
3+
type T = { a: number, b: string };
4+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
5+
>a : Symbol(a, Decl(mappedTypeModifiers.ts, 1, 10))
6+
>b : Symbol(b, Decl(mappedTypeModifiers.ts, 1, 21))
7+
8+
type U = { a: number | undefined, b: string | undefined };
9+
>U : Symbol(U, Decl(mappedTypeModifiers.ts, 1, 34))
10+
>a : Symbol(a, Decl(mappedTypeModifiers.ts, 2, 10))
11+
>b : Symbol(b, Decl(mappedTypeModifiers.ts, 2, 33))
12+
13+
type P = { a?: number, b?: string };
14+
>P : Symbol(P, Decl(mappedTypeModifiers.ts, 2, 58))
15+
>a : Symbol(a, Decl(mappedTypeModifiers.ts, 3, 10))
16+
>b : Symbol(b, Decl(mappedTypeModifiers.ts, 3, 22))
17+
18+
type R = { readonly a: number, readonly b: string };
19+
>R : Symbol(R, Decl(mappedTypeModifiers.ts, 3, 36))
20+
>a : Symbol(a, Decl(mappedTypeModifiers.ts, 4, 10))
21+
>b : Symbol(b, Decl(mappedTypeModifiers.ts, 4, 30))
22+
23+
type PR = { readonly a?: number, readonly b?: string };
24+
>PR : Symbol(PR, Decl(mappedTypeModifiers.ts, 4, 52))
25+
>a : Symbol(a, Decl(mappedTypeModifiers.ts, 5, 11))
26+
>b : Symbol(b, Decl(mappedTypeModifiers.ts, 5, 32))
27+
28+
// Validate they all have the same keys
29+
var v00: "a" | "b";
30+
>v00 : Symbol(v00, Decl(mappedTypeModifiers.ts, 8, 3), Decl(mappedTypeModifiers.ts, 9, 3), Decl(mappedTypeModifiers.ts, 10, 3), Decl(mappedTypeModifiers.ts, 11, 3), Decl(mappedTypeModifiers.ts, 12, 3), Decl(mappedTypeModifiers.ts, 13, 3))
31+
32+
var v00: keyof T;
33+
>v00 : Symbol(v00, Decl(mappedTypeModifiers.ts, 8, 3), Decl(mappedTypeModifiers.ts, 9, 3), Decl(mappedTypeModifiers.ts, 10, 3), Decl(mappedTypeModifiers.ts, 11, 3), Decl(mappedTypeModifiers.ts, 12, 3), Decl(mappedTypeModifiers.ts, 13, 3))
34+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
35+
36+
var v00: keyof U;
37+
>v00 : Symbol(v00, Decl(mappedTypeModifiers.ts, 8, 3), Decl(mappedTypeModifiers.ts, 9, 3), Decl(mappedTypeModifiers.ts, 10, 3), Decl(mappedTypeModifiers.ts, 11, 3), Decl(mappedTypeModifiers.ts, 12, 3), Decl(mappedTypeModifiers.ts, 13, 3))
38+
>U : Symbol(U, Decl(mappedTypeModifiers.ts, 1, 34))
39+
40+
var v00: keyof P;
41+
>v00 : Symbol(v00, Decl(mappedTypeModifiers.ts, 8, 3), Decl(mappedTypeModifiers.ts, 9, 3), Decl(mappedTypeModifiers.ts, 10, 3), Decl(mappedTypeModifiers.ts, 11, 3), Decl(mappedTypeModifiers.ts, 12, 3), Decl(mappedTypeModifiers.ts, 13, 3))
42+
>P : Symbol(P, Decl(mappedTypeModifiers.ts, 2, 58))
43+
44+
var v00: keyof R;
45+
>v00 : Symbol(v00, Decl(mappedTypeModifiers.ts, 8, 3), Decl(mappedTypeModifiers.ts, 9, 3), Decl(mappedTypeModifiers.ts, 10, 3), Decl(mappedTypeModifiers.ts, 11, 3), Decl(mappedTypeModifiers.ts, 12, 3), Decl(mappedTypeModifiers.ts, 13, 3))
46+
>R : Symbol(R, Decl(mappedTypeModifiers.ts, 3, 36))
47+
48+
var v00: keyof PR;
49+
>v00 : Symbol(v00, Decl(mappedTypeModifiers.ts, 8, 3), Decl(mappedTypeModifiers.ts, 9, 3), Decl(mappedTypeModifiers.ts, 10, 3), Decl(mappedTypeModifiers.ts, 11, 3), Decl(mappedTypeModifiers.ts, 12, 3), Decl(mappedTypeModifiers.ts, 13, 3))
50+
>PR : Symbol(PR, Decl(mappedTypeModifiers.ts, 4, 52))
51+
52+
// Validate that non-isomorphic mapped types strip modifiers
53+
var v01: T;
54+
>v01 : Symbol(v01, Decl(mappedTypeModifiers.ts, 16, 3), Decl(mappedTypeModifiers.ts, 17, 3), Decl(mappedTypeModifiers.ts, 18, 3))
55+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
56+
57+
var v01: Pick<R, keyof T>;
58+
>v01 : Symbol(v01, Decl(mappedTypeModifiers.ts, 16, 3), Decl(mappedTypeModifiers.ts, 17, 3), Decl(mappedTypeModifiers.ts, 18, 3))
59+
>Pick : Symbol(Pick, Decl(lib.d.ts, --, --))
60+
>R : Symbol(R, Decl(mappedTypeModifiers.ts, 3, 36))
61+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
62+
63+
var v01: Pick<Readonly<T>, keyof T>;
64+
>v01 : Symbol(v01, Decl(mappedTypeModifiers.ts, 16, 3), Decl(mappedTypeModifiers.ts, 17, 3), Decl(mappedTypeModifiers.ts, 18, 3))
65+
>Pick : Symbol(Pick, Decl(lib.d.ts, --, --))
66+
>Readonly : Symbol(Readonly, Decl(lib.d.ts, --, --))
67+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
68+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
69+
70+
// Validate that non-isomorphic mapped types strip modifiers
71+
var v02: U;
72+
>v02 : Symbol(v02, Decl(mappedTypeModifiers.ts, 21, 3), Decl(mappedTypeModifiers.ts, 22, 3), Decl(mappedTypeModifiers.ts, 23, 3), Decl(mappedTypeModifiers.ts, 24, 3), Decl(mappedTypeModifiers.ts, 25, 3))
73+
>U : Symbol(U, Decl(mappedTypeModifiers.ts, 1, 34))
74+
75+
var v02: Pick<P, keyof T>;
76+
>v02 : Symbol(v02, Decl(mappedTypeModifiers.ts, 21, 3), Decl(mappedTypeModifiers.ts, 22, 3), Decl(mappedTypeModifiers.ts, 23, 3), Decl(mappedTypeModifiers.ts, 24, 3), Decl(mappedTypeModifiers.ts, 25, 3))
77+
>Pick : Symbol(Pick, Decl(lib.d.ts, --, --))
78+
>P : Symbol(P, Decl(mappedTypeModifiers.ts, 2, 58))
79+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
80+
81+
var v02: Pick<PR, keyof T>;
82+
>v02 : Symbol(v02, Decl(mappedTypeModifiers.ts, 21, 3), Decl(mappedTypeModifiers.ts, 22, 3), Decl(mappedTypeModifiers.ts, 23, 3), Decl(mappedTypeModifiers.ts, 24, 3), Decl(mappedTypeModifiers.ts, 25, 3))
83+
>Pick : Symbol(Pick, Decl(lib.d.ts, --, --))
84+
>PR : Symbol(PR, Decl(mappedTypeModifiers.ts, 4, 52))
85+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
86+
87+
var v02: Pick<Partial<T>, keyof T>;
88+
>v02 : Symbol(v02, Decl(mappedTypeModifiers.ts, 21, 3), Decl(mappedTypeModifiers.ts, 22, 3), Decl(mappedTypeModifiers.ts, 23, 3), Decl(mappedTypeModifiers.ts, 24, 3), Decl(mappedTypeModifiers.ts, 25, 3))
89+
>Pick : Symbol(Pick, Decl(lib.d.ts, --, --))
90+
>Partial : Symbol(Partial, Decl(lib.d.ts, --, --))
91+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
92+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
93+
94+
var v02: Pick<Partial<Readonly<T>>, keyof T>;
95+
>v02 : Symbol(v02, Decl(mappedTypeModifiers.ts, 21, 3), Decl(mappedTypeModifiers.ts, 22, 3), Decl(mappedTypeModifiers.ts, 23, 3), Decl(mappedTypeModifiers.ts, 24, 3), Decl(mappedTypeModifiers.ts, 25, 3))
96+
>Pick : Symbol(Pick, Decl(lib.d.ts, --, --))
97+
>Partial : Symbol(Partial, Decl(lib.d.ts, --, --))
98+
>Readonly : Symbol(Readonly, Decl(lib.d.ts, --, --))
99+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
100+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
101+
102+
// Validate that isomorphic mapped types preserve optional modifier
103+
var v03: P;
104+
>v03 : Symbol(v03, Decl(mappedTypeModifiers.ts, 28, 3), Decl(mappedTypeModifiers.ts, 29, 3))
105+
>P : Symbol(P, Decl(mappedTypeModifiers.ts, 2, 58))
106+
107+
var v03: Partial<T>;
108+
>v03 : Symbol(v03, Decl(mappedTypeModifiers.ts, 28, 3), Decl(mappedTypeModifiers.ts, 29, 3))
109+
>Partial : Symbol(Partial, Decl(lib.d.ts, --, --))
110+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
111+
112+
// Validate that isomorphic mapped types preserve readonly modifier
113+
var v04: R;
114+
>v04 : Symbol(v04, Decl(mappedTypeModifiers.ts, 32, 3), Decl(mappedTypeModifiers.ts, 33, 3))
115+
>R : Symbol(R, Decl(mappedTypeModifiers.ts, 3, 36))
116+
117+
var v04: Readonly<T>;
118+
>v04 : Symbol(v04, Decl(mappedTypeModifiers.ts, 32, 3), Decl(mappedTypeModifiers.ts, 33, 3))
119+
>Readonly : Symbol(Readonly, Decl(lib.d.ts, --, --))
120+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
121+
122+
// Validate that isomorphic mapped types preserve both partial and readonly modifiers
123+
var v05: PR;
124+
>v05 : Symbol(v05, Decl(mappedTypeModifiers.ts, 36, 3), Decl(mappedTypeModifiers.ts, 37, 3), Decl(mappedTypeModifiers.ts, 38, 3), Decl(mappedTypeModifiers.ts, 39, 3), Decl(mappedTypeModifiers.ts, 40, 3))
125+
>PR : Symbol(PR, Decl(mappedTypeModifiers.ts, 4, 52))
126+
127+
var v05: Partial<R>;
128+
>v05 : Symbol(v05, Decl(mappedTypeModifiers.ts, 36, 3), Decl(mappedTypeModifiers.ts, 37, 3), Decl(mappedTypeModifiers.ts, 38, 3), Decl(mappedTypeModifiers.ts, 39, 3), Decl(mappedTypeModifiers.ts, 40, 3))
129+
>Partial : Symbol(Partial, Decl(lib.d.ts, --, --))
130+
>R : Symbol(R, Decl(mappedTypeModifiers.ts, 3, 36))
131+
132+
var v05: Readonly<P>;
133+
>v05 : Symbol(v05, Decl(mappedTypeModifiers.ts, 36, 3), Decl(mappedTypeModifiers.ts, 37, 3), Decl(mappedTypeModifiers.ts, 38, 3), Decl(mappedTypeModifiers.ts, 39, 3), Decl(mappedTypeModifiers.ts, 40, 3))
134+
>Readonly : Symbol(Readonly, Decl(lib.d.ts, --, --))
135+
>P : Symbol(P, Decl(mappedTypeModifiers.ts, 2, 58))
136+
137+
var v05: Partial<Readonly<T>>;
138+
>v05 : Symbol(v05, Decl(mappedTypeModifiers.ts, 36, 3), Decl(mappedTypeModifiers.ts, 37, 3), Decl(mappedTypeModifiers.ts, 38, 3), Decl(mappedTypeModifiers.ts, 39, 3), Decl(mappedTypeModifiers.ts, 40, 3))
139+
>Partial : Symbol(Partial, Decl(lib.d.ts, --, --))
140+
>Readonly : Symbol(Readonly, Decl(lib.d.ts, --, --))
141+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
142+
143+
var v05: Readonly<Partial<T>>;
144+
>v05 : Symbol(v05, Decl(mappedTypeModifiers.ts, 36, 3), Decl(mappedTypeModifiers.ts, 37, 3), Decl(mappedTypeModifiers.ts, 38, 3), Decl(mappedTypeModifiers.ts, 39, 3), Decl(mappedTypeModifiers.ts, 40, 3))
145+
>Readonly : Symbol(Readonly, Decl(lib.d.ts, --, --))
146+
>Partial : Symbol(Partial, Decl(lib.d.ts, --, --))
147+
>T : Symbol(T, Decl(mappedTypeModifiers.ts, 0, 0))
148+
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
=== tests/cases/conformance/types/mapped/mappedTypeModifiers.ts ===
2+
3+
type T = { a: number, b: string };
4+
>T : T
5+
>a : number
6+
>b : string
7+
8+
type U = { a: number | undefined, b: string | undefined };
9+
>U : U
10+
>a : number | undefined
11+
>b : string | undefined
12+
13+
type P = { a?: number, b?: string };
14+
>P : P
15+
>a : number | undefined
16+
>b : string | undefined
17+
18+
type R = { readonly a: number, readonly b: string };
19+
>R : R
20+
>a : number
21+
>b : string
22+
23+
type PR = { readonly a?: number, readonly b?: string };
24+
>PR : PR
25+
>a : number | undefined
26+
>b : string | undefined
27+
28+
// Validate they all have the same keys
29+
var v00: "a" | "b";
30+
>v00 : "a" | "b"
31+
32+
var v00: keyof T;
33+
>v00 : "a" | "b"
34+
>T : T
35+
36+
var v00: keyof U;
37+
>v00 : "a" | "b"
38+
>U : U
39+
40+
var v00: keyof P;
41+
>v00 : "a" | "b"
42+
>P : P
43+
44+
var v00: keyof R;
45+
>v00 : "a" | "b"
46+
>R : R
47+
48+
var v00: keyof PR;
49+
>v00 : "a" | "b"
50+
>PR : PR
51+
52+
// Validate that non-isomorphic mapped types strip modifiers
53+
var v01: T;
54+
>v01 : T
55+
>T : T
56+
57+
var v01: Pick<R, keyof T>;
58+
>v01 : T
59+
>Pick : Pick<T, K>
60+
>R : R
61+
>T : T
62+
63+
var v01: Pick<Readonly<T>, keyof T>;
64+
>v01 : T
65+
>Pick : Pick<T, K>
66+
>Readonly : Readonly<T>
67+
>T : T
68+
>T : T
69+
70+
// Validate that non-isomorphic mapped types strip modifiers
71+
var v02: U;
72+
>v02 : U
73+
>U : U
74+
75+
var v02: Pick<P, keyof T>;
76+
>v02 : U
77+
>Pick : Pick<T, K>
78+
>P : P
79+
>T : T
80+
81+
var v02: Pick<PR, keyof T>;
82+
>v02 : U
83+
>Pick : Pick<T, K>
84+
>PR : PR
85+
>T : T
86+
87+
var v02: Pick<Partial<T>, keyof T>;
88+
>v02 : U
89+
>Pick : Pick<T, K>
90+
>Partial : Partial<T>
91+
>T : T
92+
>T : T
93+
94+
var v02: Pick<Partial<Readonly<T>>, keyof T>;
95+
>v02 : U
96+
>Pick : Pick<T, K>
97+
>Partial : Partial<T>
98+
>Readonly : Readonly<T>
99+
>T : T
100+
>T : T
101+
102+
// Validate that isomorphic mapped types preserve optional modifier
103+
var v03: P;
104+
>v03 : P
105+
>P : P
106+
107+
var v03: Partial<T>;
108+
>v03 : P
109+
>Partial : Partial<T>
110+
>T : T
111+
112+
// Validate that isomorphic mapped types preserve readonly modifier
113+
var v04: R;
114+
>v04 : R
115+
>R : R
116+
117+
var v04: Readonly<T>;
118+
>v04 : R
119+
>Readonly : Readonly<T>
120+
>T : T
121+
122+
// Validate that isomorphic mapped types preserve both partial and readonly modifiers
123+
var v05: PR;
124+
>v05 : PR
125+
>PR : PR
126+
127+
var v05: Partial<R>;
128+
>v05 : PR
129+
>Partial : Partial<T>
130+
>R : R
131+
132+
var v05: Readonly<P>;
133+
>v05 : PR
134+
>Readonly : Readonly<T>
135+
>P : P
136+
137+
var v05: Partial<Readonly<T>>;
138+
>v05 : PR
139+
>Partial : Partial<T>
140+
>Readonly : Readonly<T>
141+
>T : T
142+
143+
var v05: Readonly<Partial<T>>;
144+
>v05 : PR
145+
>Readonly : Readonly<T>
146+
>Partial : Partial<T>
147+
>T : T
148+

0 commit comments

Comments
 (0)