Skip to content

Commit 9619dc1

Browse files
committed
Add tests
1 parent 45c53e0 commit 9619dc1

5 files changed

Lines changed: 801 additions & 0 deletions

File tree

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
tests/cases/conformance/types/mapped/mappedTypes5.ts(6,9): error TS2322: Type 'Partial<T>' is not assignable to type 'Readonly<T>'.
2+
tests/cases/conformance/types/mapped/mappedTypes5.ts(8,9): error TS2322: Type 'Partial<Readonly<T>>' is not assignable to type 'Readonly<T>'.
3+
tests/cases/conformance/types/mapped/mappedTypes5.ts(9,9): error TS2322: Type 'Readonly<Partial<T>>' is not assignable to type 'Readonly<T>'.
4+
5+
6+
==== tests/cases/conformance/types/mapped/mappedTypes5.ts (3 errors) ====
7+
function f<T>(p: Partial<T>, r: Readonly<T>, pr: Partial<Readonly<T>>, rp: Readonly<Partial<T>>) {
8+
let a1: Partial<T> = p;
9+
let a2: Partial<T> = r;
10+
let a3: Partial<T> = pr;
11+
let a4: Partial<T> = rp;
12+
let b1: Readonly<T> = p; // Error
13+
~~
14+
!!! error TS2322: Type 'Partial<T>' is not assignable to type 'Readonly<T>'.
15+
let b2: Readonly<T> = r;
16+
let b3: Readonly<T> = pr; // Error
17+
~~
18+
!!! error TS2322: Type 'Partial<Readonly<T>>' is not assignable to type 'Readonly<T>'.
19+
let b4: Readonly<T> = rp; // Error
20+
~~
21+
!!! error TS2322: Type 'Readonly<Partial<T>>' is not assignable to type 'Readonly<T>'.
22+
let c1: Partial<Readonly<T>> = p;
23+
let c2: Partial<Readonly<T>> = r;
24+
let c3: Partial<Readonly<T>> = pr;
25+
let c4: Partial<Readonly<T>> = rp;
26+
let d1: Readonly<Partial<T>> = p;
27+
let d2: Readonly<Partial<T>> = r;
28+
let d3: Readonly<Partial<T>> = pr;
29+
let d4: Readonly<Partial<T>> = rp;
30+
}
31+
32+
// Repro from #17682
33+
34+
type State = {
35+
[key: string]: string | boolean | number | null;
36+
};
37+
38+
type Args1<T extends State> = {
39+
readonly previous: Readonly<Partial<T>>;
40+
readonly current: Readonly<Partial<T>>;
41+
};
42+
43+
type Args2<T extends State> = {
44+
readonly previous: Partial<Readonly<T>>;
45+
readonly current: Partial<Readonly<T>>;
46+
};
47+
48+
function doit<T extends State>() {
49+
let previous: Partial<T> = Object.create(null);
50+
let current: Partial<T> = Object.create(null);
51+
let args1: Args1<T> = { previous, current };
52+
let args2: Args2<T> = { previous, current };
53+
}
54+
55+
type State2 = { foo: number, bar: string };
56+
57+
type Args3 = {
58+
readonly previous: Readonly<Partial<State2>>;
59+
readonly current: Readonly<Partial<State2>>;
60+
};
61+
62+
type Args4 = {
63+
readonly previous: Partial<Readonly<State2>>;
64+
readonly current: Partial<Readonly<State2>>;
65+
};
66+
67+
function doit2() {
68+
let previous: Partial<State2> = Object.create(null);
69+
let current: Partial<State2> = Object.create(null);
70+
let args1: Args3 = { previous, current };
71+
let args2: Args4 = { previous, current };
72+
}
73+
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
//// [mappedTypes5.ts]
2+
function f<T>(p: Partial<T>, r: Readonly<T>, pr: Partial<Readonly<T>>, rp: Readonly<Partial<T>>) {
3+
let a1: Partial<T> = p;
4+
let a2: Partial<T> = r;
5+
let a3: Partial<T> = pr;
6+
let a4: Partial<T> = rp;
7+
let b1: Readonly<T> = p; // Error
8+
let b2: Readonly<T> = r;
9+
let b3: Readonly<T> = pr; // Error
10+
let b4: Readonly<T> = rp; // Error
11+
let c1: Partial<Readonly<T>> = p;
12+
let c2: Partial<Readonly<T>> = r;
13+
let c3: Partial<Readonly<T>> = pr;
14+
let c4: Partial<Readonly<T>> = rp;
15+
let d1: Readonly<Partial<T>> = p;
16+
let d2: Readonly<Partial<T>> = r;
17+
let d3: Readonly<Partial<T>> = pr;
18+
let d4: Readonly<Partial<T>> = rp;
19+
}
20+
21+
// Repro from #17682
22+
23+
type State = {
24+
[key: string]: string | boolean | number | null;
25+
};
26+
27+
type Args1<T extends State> = {
28+
readonly previous: Readonly<Partial<T>>;
29+
readonly current: Readonly<Partial<T>>;
30+
};
31+
32+
type Args2<T extends State> = {
33+
readonly previous: Partial<Readonly<T>>;
34+
readonly current: Partial<Readonly<T>>;
35+
};
36+
37+
function doit<T extends State>() {
38+
let previous: Partial<T> = Object.create(null);
39+
let current: Partial<T> = Object.create(null);
40+
let args1: Args1<T> = { previous, current };
41+
let args2: Args2<T> = { previous, current };
42+
}
43+
44+
type State2 = { foo: number, bar: string };
45+
46+
type Args3 = {
47+
readonly previous: Readonly<Partial<State2>>;
48+
readonly current: Readonly<Partial<State2>>;
49+
};
50+
51+
type Args4 = {
52+
readonly previous: Partial<Readonly<State2>>;
53+
readonly current: Partial<Readonly<State2>>;
54+
};
55+
56+
function doit2() {
57+
let previous: Partial<State2> = Object.create(null);
58+
let current: Partial<State2> = Object.create(null);
59+
let args1: Args3 = { previous, current };
60+
let args2: Args4 = { previous, current };
61+
}
62+
63+
64+
//// [mappedTypes5.js]
65+
"use strict";
66+
function f(p, r, pr, rp) {
67+
var a1 = p;
68+
var a2 = r;
69+
var a3 = pr;
70+
var a4 = rp;
71+
var b1 = p; // Error
72+
var b2 = r;
73+
var b3 = pr; // Error
74+
var b4 = rp; // Error
75+
var c1 = p;
76+
var c2 = r;
77+
var c3 = pr;
78+
var c4 = rp;
79+
var d1 = p;
80+
var d2 = r;
81+
var d3 = pr;
82+
var d4 = rp;
83+
}
84+
function doit() {
85+
var previous = Object.create(null);
86+
var current = Object.create(null);
87+
var args1 = { previous: previous, current: current };
88+
var args2 = { previous: previous, current: current };
89+
}
90+
function doit2() {
91+
var previous = Object.create(null);
92+
var current = Object.create(null);
93+
var args1 = { previous: previous, current: current };
94+
var args2 = { previous: previous, current: current };
95+
}

0 commit comments

Comments
 (0)