收藏
回答

Page 对象里如何声明混入的 behaviors 的 TypeScript 类型?

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> 也不行。

最后一次编辑于  12-09
回答关注问题邀请回答
收藏
登录 后发表内容