@@ -144,6 +144,8 @@ declare namespace WechatMiniprogram.Component {
144144 /** 组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用,参见 [组件间通信与事件](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html) */
145145 methods : M & ( TIsPage extends true ? Partial < Page . ILifetime > : { } )
146146 }
147+
148+ type Satisfy < T , V > = V extends T ? V : T
147149 type PropertyType =
148150 | StringConstructor
149151 | NumberConstructor
@@ -164,11 +166,24 @@ declare namespace WechatMiniprogram.Component {
164166 : T extends ObjectConstructor
165167 ? IAnyObject
166168 : never
167- type FullProperty < T extends PropertyType > = {
169+ type SimpleValueType < T extends PropertyType , V > = T extends StringConstructor
170+ ? Satisfy < string , V >
171+ : T extends NumberConstructor
172+ ? Satisfy < number , V >
173+ : T extends BooleanConstructor
174+ ? Satisfy < boolean , V >
175+ : T extends ArrayConstructor
176+ ? Satisfy < any [ ] , V >
177+ : T extends ObjectConstructor
178+ ? Satisfy < Record < string , any > | null , V >
179+ : T extends FunctionConstructor
180+ ? Satisfy < ( ...args : any [ ] ) => any , V >
181+ : never
182+ type FullProperty < T extends PropertyType , V extends ValueType < T > > = {
168183 /** 属性类型 */
169184 type : T
170185 /** 属性初始值 */
171- value ?: ValueType < T >
186+ value ?: V
172187 /** 属性值被更改时的响应函数 */
173188 observer ?:
174189 | string
@@ -181,12 +196,12 @@ declare namespace WechatMiniprogram.Component {
181196 optionalTypes ?: ShortProperty [ ]
182197 }
183198 type AllFullProperty =
184- | FullProperty < StringConstructor >
185- | FullProperty < NumberConstructor >
186- | FullProperty < BooleanConstructor >
187- | FullProperty < ArrayConstructor >
188- | FullProperty < ObjectConstructor >
189- | FullProperty < null >
199+ | FullProperty < StringConstructor , any >
200+ | FullProperty < NumberConstructor , any >
201+ | FullProperty < BooleanConstructor , any >
202+ | FullProperty < ArrayConstructor , any >
203+ | FullProperty < ObjectConstructor , any >
204+ | FullProperty < null , any >
190205 type ShortProperty =
191206 | StringConstructor
192207 | NumberConstructor
@@ -198,8 +213,15 @@ declare namespace WechatMiniprogram.Component {
198213 type PropertyToData < T extends AllProperty > = T extends ShortProperty
199214 ? ValueType < T >
200215 : FullPropertyToData < Exclude < T , ShortProperty > >
201- type ArrayOrObject = ArrayConstructor | ObjectConstructor
202- type FullPropertyToData < T extends AllFullProperty > = T [ 'type' ] extends ArrayOrObject ? unknown extends T [ 'value' ] ? ValueType < T [ 'type' ] > : T [ 'value' ] : ValueType < T [ 'type' ] >
216+ type FullPropertyToData < T > = T extends FullProperty < infer T , infer V >
217+ ? unknown extends V
218+ ? ValueType < T >
219+ : ( ( a : T ) => void ) extends ( a : PropertyType ) => void
220+ ? V
221+ : V extends ValueType < T >
222+ ? SimpleValueType < T , V >
223+ : never
224+ : never
203225 type PropertyOptionToData < P extends PropertyOption > = {
204226 [ name in keyof P ] : PropertyToData < P [ name ] >
205227 }
0 commit comments