-
Notifications
You must be signed in to change notification settings - Fork 0
/
normal.test.ts
157 lines (144 loc) · 4.28 KB
/
normal.test.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/* eslint-disable @typescript-eslint/no-unused-vars */
/* eslint-disable @typescript-eslint/no-unused-expressions */
import { Checking, type Test } from "hry-types";
import type { Wm } from "../../../../thirdLib";
import type { Detail, Mark, WMBaseEvent } from "../../../..";
import type { ComponentType } from "../../../DefineComponent/ReturnType/ComponentType";
import type {
Bubbles,
BubblesCapture,
BubblesCaptureComposed,
BubblesComposed,
Capture,
CaptureComposed,
} from "../../../RootComponent/CustomEvents/CustomEventsTag";
import type { Mock_User } from "../../../RootComponent/Properties/test/normalRequired.test";
import { SubComponent } from "../..";
type CompDoc = ComponentType<{
customEvents: {
aaa_str: string;
aaa_bubbles: string | Bubbles;
aaa_CapturePhase: string | Capture;
aaa_BubblesCapturePhase: null | BubblesCapture;
aaa_BubblesComposed: string | BubblesComposed;
aaa_CapturePhaseComposed: string | CaptureComposed;
aaa_BubblesCapturePhaseComposed: string | BubblesCaptureComposed;
};
}>;
// 1.1 events字段提示 key为 CompDoc下customEvents的字段,类型为函数(e)=>void,e为对应keys类型去除事件标记(冒泡 捕获 穿透)
const sub1 = SubComponent<{}, CompDoc>()({
events: {
aaa_str(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
aaa_bubbles(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
aaa_CapturePhase(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
aaa_BubblesCapturePhase(e) {
Checking<typeof e.detail, null, Test.Pass>;
},
aaa_BubblesComposed(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
aaa_CapturePhaseComposed(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
aaa_BubblesCapturePhaseComposed(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
},
});
interface Sub1Expected {
BubblesComposed: string | BubblesComposed;
CapturePhaseComposed: string | CaptureComposed;
BubblesCapturePhaseComposed: string | BubblesCaptureComposed;
}
// 1.2 Composed事件会被返回
Checking<typeof sub1, Sub1Expected, Test.Pass>;
// 2.1 key可写入后缀字段(_catch,表示阻止冒泡和捕获事件)。
const sub2 = SubComponent<{}, CompDoc>()({
events: {
aaa_BubblesComposed_catch(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
aaa_CapturePhaseComposed_catch(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
},
});
// 2.2 返回没有被加后最(_catch)的Composed事件
Checking<typeof sub2, { BubblesCapturePhaseComposed: string | BubblesCaptureComposed }, Test.Pass>;
const sub3 = SubComponent<{}, CompDoc>()({
events: {
aaa_BubblesComposed_catch(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
aaa_CapturePhaseComposed_catch(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
aaa_BubblesCapturePhaseComposed_catch(e) {
Checking<typeof e.detail, string, Test.Pass>;
},
},
});
// 2.4 若Composed事件都被阻止则返回never
Checking<typeof sub3, never, Test.Pass>;
// 3.1 基础组件基本事件参数为WMBaseEvent
SubComponent<{}, Wm.View>()({
events: {
view_tap(e) {
Checking<typeof e, WMBaseEvent, Test.Pass>;
},
view_longtap(e) {
Checking<typeof e, WMBaseEvent, Test.Pass>;
},
// ...
},
});
// 3.1 基础组件自定义事件参数为Detail<object>
SubComponent<{}, Wm.ScrollView>()({
events: {
scrollView_bindscroll(e) {
Checking<
typeof e,
Detail<{
scrollLeft: number;
scrollTop: number;
scrollHeight: number;
scrollWidth: number;
deltaX: number;
deltaY: number;
}>,
Test.Pass
>;
},
// ...
},
});
// 4 可为事件自定义类型
SubComponent<{}, Wm.View>()({
events: {
view_tap(e: Detail<number>) {
Checking<typeof e.detail, number, Test.Pass>;
},
view_longtap(e: Mark<Mock_User>) {
Checking<typeof e.mark, Mock_User, Test.Pass>;
},
// ...
},
});
// 4 可为事件自定义类型
SubComponent<{}, Wm.View>()({
events: {
view_tap(e: Detail<number>) {
Checking<typeof e.detail, number, Test.Pass>;
},
view_longtap(e: Mark<Mock_User>) {
Checking<typeof e.mark, Mock_User, Test.Pass>;
},
// ...
},
});