Component 不传递 behaviors 选项可以正确推断 this 对象的 TS 类型,但传递之后就不行了。比如下面的代码,如果删掉 behaviors 这一行,通过 this 来访问组件下的属性和方法就能得到类型提示,比如 this.data.form.data.nickname、this.loadData(),不过 behaviors 的属性和方法仍然还是不行。
Component({
behaviors: [commonBehavior, storeBehavior, formBehavior],
data: {
form: {
data: {
nickname: null,
},
rules: [
{
name: "nickname",
rules: [{ required: true, message: "请输入昵称" }],
},
],
},
},
lifetimes: {
async attached() {
await this.loadData();
},
},
methods: {
async loadData() {
const user = this.data.loginedUser;
this.setFormData({ nickname: user!.nickname });
},
onTapClear() {
this.setFormData({ nickname: null });
},
onSubmitForm(e) {
// 如果是事件触发,需要先保存输入再提交
if (e) {
this.onChangeInput(e);
}
this.validateForm({
success: async (data) => {
const { nickname } = data;
await userUpdate({ nickname });
this.updateLoginedUser();
wx.showToast({ title: "提交成功" });
wx.navigateBack();
},
});
},
},
});
类型定义问题可以到这里 https://github.com/wechat-miniprogram/api-typings 提 ssue ,最好能提供复现的测试用例