formBehavior.js
export default Behavior({
data: {
formData: {},
formRules: [],
formError: "",
formLoading: false,
},
methods: {
setFormData(formData: Record) {
this.setData({ formData });
},
setFormError(formError: string) {
this.setData({ formError });
},
setFormLoading(formLoading: boolean) {
this.setData({ formLoading });
},
submitForm(
success?: (formData: Record) => void,
fail?: (errors: Array<{ message: string }>) => void
) {
},
},
});
page.js
Page({
behaviors: [formBehavior],
onSubmitForm() {
// 消除混入的 Behavior 属性不存在的 TS 告警
(this as any).submitForm(async (formData: Record) => {
});
},
});
上面的代码中 Page 对象混入了 formBehavior,但在调用其方法 submitForm 时 TypeScript 告警“属性不存在”,只能通过 this as any 来强制隐藏。尝试过定义 formBehavior 的数据类型 FormBehaviorData 和方法类型 FormBehaviorMehtod,然后通过 TData 和 TMethod 范型参数传递给 Behavior,没有用,给页面指定范型参数 Page<FormBehaviorData & WechatMiniprogram.Page.DataOption, FormBehaviorMehtod & WechatMiniprogram.Page.CustomOption> 也不行。