1
+ declare interface PropertyOption {
2
+ /** 属性类型 */
3
+ type :
4
+ | StringConstructor
5
+ | NumberConstructor
6
+ | BooleanConstructor
7
+ | ObjectConstructor
8
+ | ArrayConstructor
9
+ | null ;
10
+ /** 属性初始值 */
11
+ value : any ;
12
+ /** 属性值被更改时的响应函数 */
13
+ observer ?(
14
+ newVal ?: any ,
15
+ oldVal ?: any ,
16
+ changedPath ?: Array < string | number > ,
17
+ ) : void ;
18
+ }
19
+
20
+ declare interface TriggerEventOption {
21
+ /** 事件是否冒泡
22
+ *
23
+ * 默认值: `false`
24
+ */
25
+ bubbles ?: boolean ;
26
+ /** 事件是否可以穿越组件边界,为false时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部
27
+ *
28
+ * 默认值: `false`
29
+ */
30
+ composed ?: boolean ;
31
+ /** 事件是否拥有捕获阶段
32
+ *
33
+ * 默认值: `false`
34
+ */
35
+ capturePhase ?: boolean ;
36
+ }
37
+
38
+ declare interface WxComponent extends BaseComponent {
39
+ /** 组件的文件路径 */
40
+ is : string ;
41
+ /** 节点id */
42
+ id : string ;
43
+ /** 节点dataset */
44
+ dataset : string ;
45
+ /** 组件数据,**包括内部数据和属性值** */
46
+ data : object ;
47
+ /** 组件数据,**包括内部数据和属性值**(与 `data` 一致) */
48
+ properties : {
49
+ [ propertyName : string ] : PropertyOption ;
50
+ } ;
51
+
52
+ /** 设置data并执行视图层渲染 */
53
+ setData (
54
+ /** 这次要改变的数据
55
+ *
56
+ * 以 `key: value` 的形式表示,将 `this.data` 中的 `key` 对应的值改变成 `value`。
57
+ *
58
+ * 其中 `key` 可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,如 `array[2].message`,`a.b.c.d`,并且不需要在 this.data 中预先定义。
59
+ */
60
+ data : object ,
61
+ /** setData引起的界面更新渲染完毕后的回调函数,最低基础库: `1.5.0` */
62
+ callback ?: ( ( data : object ) => void ) ,
63
+ ) ;
64
+ /** 检查组件是否具有 `behavior` (检查时会递归检查被直接或间接引入的所有behavior) */
65
+ hasBehavior ( behavior : object ) : void ;
66
+ /** 触发事件,参见组件事件 */
67
+ triggerEvent ( name : string , detail : object , options : TriggerEventOption ) : void ;
68
+ /** 创建一个 SelectorQuery 对象,选择器选取范围为这个组件实例内 */
69
+ createSelectorQuery ( ) : SelectorQuery ;
70
+ /** 创建一个 IntersectionObserver 对象,选择器选取范围为这个组件实例内 */
71
+ createIntersectionObserver ( ) : IntersectionObserver ;
72
+ /** 使用选择器选择组件实例节点,返回匹配到的第一个组件实例对象(会被 `wx://component-export` 影响) */
73
+ selectComponent ( selector : string ) : WxComponent ;
74
+ /** 使用选择器选择组件实例节点,返回匹配到的全部组件实例对象组成的数组 */
75
+ selectAllComponents ( selector : string ) : WxComponent [ ] ;
76
+ /** 获取这个关系所对应的所有关联节点,参见 组件间关系 */
77
+ getRelationNodes ( relationKey : string ) : WxComponent [ ] ;
78
+ }
79
+
80
+ declare interface ComponentLifetimes {
81
+ /** 组件生命周期函数,在组件实例进入页面节点树时执行,注意此时不能调用 `setData` */
82
+ created ?( this : WxComponent ) : void ;
83
+ /** 组件生命周期函数,在组件实例进入页面节点树时执行 */
84
+ attached ?( this : WxComponent ) : void ;
85
+ /** 组件生命周期函数,在组件布局完成后执行,此时可以获取节点信息(使用 [SelectorQuery]((SelectorQuery))) */
86
+ ready ?( this : WxComponent ) : void ;
87
+ /** 组件生命周期函数,在组件实例被移动到节点树另一个位置时执行 */
88
+ moved ?( this : WxComponent ) : void ;
89
+ /** 组件生命周期函数,在组件实例被从页面节点树移除时执行 */
90
+ detached ?( this : WxComponent ) : void ;
91
+ }
92
+
93
+ declare interface PageLifetimes {
94
+ /** 页面生命周期回调—监听页面显示
95
+ *
96
+ * 页面显示/切入前台时触发。
97
+ */
98
+ show ?( this : WxPage ) : void ;
99
+ /** 页面生命周期回调—监听页面隐藏
100
+ *
101
+ * 页面隐藏/切入后台时触发。 如 `navigateTo` 或底部 `tab` 切换到其他页面,小程序切入后台等。
102
+ */
103
+ hide ?( this : WxPage ) : void ;
104
+ }
105
+
106
+ declare interface RelationOption {
107
+ /** 目标组件的相对关系 */
108
+ type : 'parent' | 'child' | 'ancestor' | 'descendant' ;
109
+ /** 关系生命周期函数,当关系被建立在页面节点树中时触发,触发时机在组件attached生命周期之后 */
110
+ linked ?( target : WxComponent ) : any ;
111
+ /** 关系生命周期函数,当关系在页面节点树中发生改变时触发,触发时机在组件moved生命周期之后 */
112
+ linkChanged ?( target : WxComponent ) : any ;
113
+ /** 关系生命周期函数,当关系脱离页面节点树时触发,触发时机在组件detached生命周期之后 */
114
+ unlinked ?( target : WxComponent ) : any ;
115
+ /** 如果这一项被设置,则它表示关联的目标节点所应具有的behavior,所有拥有这一behavior的组件节点都会被关联 */
116
+ target ?: string ;
117
+ }
118
+
119
+ type DefinitionFilter = (
120
+ defFields : WxComponent ,
121
+ definitionFilterArr ?: DefinitionFilter [ ] ,
122
+ ) => void ;
123
+
124
+ declare interface ComponentOptions {
125
+ multipleSlots ?: boolean ;
126
+ addGlobalClass ?: boolean ;
127
+ }
128
+
129
+ declare interface BaseComponent < CustomComponent = object > extends ComponentLifetimes {
130
+ /** 组件的对外属性,是属性名到属性设置的映射表 */
131
+ properties ?: {
132
+ [ propertyName : string ] : PropertyOption ;
133
+ } ;
134
+ /** 组件的内部数据,和 `properties` 一同用于组件的模板渲染 */
135
+ data ?: object ;
136
+ /** object组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用,参见 [组件事件](events.md) */
137
+ methods ?: {
138
+ [ methodName : string ] : ( this : WxComponent ) => any ;
139
+ } ;
140
+ /** 类似于mixins和traits的组件间代码复用机制,参见 [behaviors](behaviors.md) */
141
+ behaviors ?: string [ ] ;
142
+ /** 组件间关系定义,参见 [组件间关系](relations.md) */
143
+ relations ?: {
144
+ [ componentName : string ] : RelationOption ;
145
+ } ;
146
+ /** 组件接受的外部样式类,参见 [外部样式类](wxml-wxss.md) */
147
+ externalClasses ?: string [ ] ;
148
+ /** 一些选项(文档中介绍相关特性时会涉及具体的选项设置,这里暂不列举) */
149
+ options ?: ComponentOptions ;
150
+ /** 组件生命周期声明对象,组件的生命周期:`created`、`attached`、`ready`、`moved`、`detached` 将收归到 `lifetimes` 字段内进行声明,原有声明方式仍旧有效,如同时存在两种声明方式,则 `lifetimes` 字段内声明方式优先级最高
151
+ *
152
+ * 最低基础库: `2.2.3` */
153
+ lifetimes ?: ComponentLifetimes ;
154
+ /** 组件所在页面的生命周期声明对象,目前仅支持页面的 `show` 和 `hide` 两个生命周期
155
+ *
156
+ * 最低基础库: `2.2.3` */
157
+ pageLifetimes ?: PageLifetimes ;
158
+ /** 定义段过滤器,用于自定义组件扩展,参见 [自定义组件扩展](extend.md)
159
+ *
160
+ * 最低基础库: `2.2.3` */
161
+ definitionFilter ?: DefinitionFilter ;
162
+ }
163
+
164
+ /** Component构造器可用于定义组件,调用Component构造器时可以指定组件的属性、数据、方法等。
165
+ *
166
+ * * 使用 `this.data` 可以获取内部数据和属性值,但不要直接修改它们,应使用 `setData` 修改。
167
+ * * 生命周期函数无法在组件方法中通过 `this` 访问到。
168
+ * * 属性名应避免以 data 开头,即不要命名成 `dataXyz` 这样的形式,因为在 WXML 中, `data-xyz=""` 会被作为节点 dataset 来处理,而不是组件属性。
169
+ * * 在一个组件的定义和使用时,组件的属性名和 data 字段相互间都不能冲突(尽管它们位于不同的定义段中)。
170
+ * * 从基础库 `2.0.9` 开始,对象类型的属性和 data 字段中可以包含函数类型的子字段,即可以通过对象类型的属性字段来传递函数。低于这一版本的基础库不支持这一特性。
171
+ * * `bug` : 对于 type 为 Object 或 Array 的属性,如果通过该组件自身的 `this.setData` 来改变属性值的一个子字段,则依旧会触发属性 observer ,且 observer 接收到的 `newVal` 是变化的那个子字段的值, `oldVal` 为空, `changedPath` 包含子字段的字段名相关信息。
172
+ */
173
+ declare function Component < CustomComponent > (
174
+ /** 自定义组件注册参数 */ options : CustomComponent ,
175
+ ) : void ;
176
+
0 commit comments