/
record.ts
93 lines (66 loc) · 1.59 KB
/
record.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import { List, Map, Record, Set } from 'immutable';
{
// Factory
const PointXY = Record({ x: 0, y: 0 });
// $ExpectType Factory<{ x: number; y: number; }>
PointXY;
// $ExpectError
PointXY({ x: 'a' });
const pointXY = PointXY();
// $ExpectType Record<{ x: number; y: number; }> & Readonly<{ x: number; y: number; }>
pointXY;
// $ExpectType number
pointXY.x;
// $ExpectError
pointXY.x = 10;
// $ExpectType number
pointXY.y;
// $ExpectError
pointXY.y = 10;
// $ExpectType { x: number; y: number; }
pointXY.toJS();
class PointClass extends PointXY {
setX(x: number) {
return this.set('x', x);
}
setY(y: number) {
return this.set('y', y);
}
}
const point = new PointClass();
// $ExpectType PointClass
point;
// $ExpectType number
point.x;
// $ExpectType number
point.y;
// $ExpectType PointClass
point.setX(10);
// $ExpectType PointClass
point.setY(10);
// $ExpectType { x: number; y: number; }
point.toJSON();
// $ExpectType { x: number; y: number; }
point.toJS();
}
{
// .getDescriptiveName
const PointXY = Record({ x: 0, y: 0 });
// $ExpectType string
Record.getDescriptiveName(PointXY());
// $ExpectError
Record.getDescriptiveName({});
}
{
// Factory
const WithMap = Record({
map: Map({ a: 'A' }),
list: List(['a']),
set: Set(['a']),
});
const withMap = WithMap();
// $ExpectType { map: Map<string, string>; list: List<string>; set: Set<string>; }
withMap.toJSON();
// $ExpectType { map: { [x: string]: string; }; list: string[]; set: string[]; }
withMap.toJS();
}