我有一个相对来说比较省力,校验完备,但不那么优雅的解决方案。 废话少说,代码如下: // use.ts function useBehavior<TData extends WechatMiniprogram.Behavior.DataOption, TProperty extends WechatMiniprogram.Behavior.PropertyOption, TMethod extends WechatMiniprogram.Behavior.MethodOption, TCustomInstanceProperty extends WechatMiniprogram.IAnyObject = Record<string, never>>(opt: Partial<WechatMiniprogram.Component.Data<TData>> & Partial<WechatMiniprogram.Component.Property<TProperty>> & Partial<WechatMiniprogram.Component.Method<TMethod>> & Partial<WechatMiniprogram.Component.OtherOption> & Partial<WechatMiniprogram.Component.Lifetimes> & ThisType<WechatMiniprogram.Component.Instance<TData, TProperty, TMethod, TCustomInstanceProperty>>) { const behaviorID = Behavior(opt) return { behaviorID, // 仅仅为了方便获取内部变量类型故 _optType: {} as typeof opt, } } export { useBehavior } // detailBehavior.ts import { useBehavior } from "@/utils/use" const { behaviorID, _optType, } = useBehavior({ properties: { detailId: { type: String, value: '' }, }, data: { isDetailLoading: false as boolean, detailLoadError: '', isDetail: false as boolean, }, observers: { 'detailId': function (newDetailId) { if (!newDetailId || this.data.isDetailLoading) { return } this.setData({ isDetailLoading: true, detailLoadError: '', isDetail: true }) const needSetData = {} this.getDetailByDetailId?.(this.data.detailId)?.then()?.catch((err) => { Object.assign(needSetData, { detailLoadError: err.toString() }) })?.finally(() => { Object.assign(needSetData, { isDetailLoading: false }) this.setData(needSetData) }) } }, methods: { getDetailByDetailId(id: number | string) { return Promise.resolve('') } } }) export default behaviorID // 此处已经把当前behavior特有的data(properties)和methods导出来了 export type DetailBehavior = typeof _optType // detail.ts import detailBehavior, { DetailBehavior } from './detailBehavior' import ortherBehavior, { BehaviorOrthers } from './detailBehavior' Component({ behaviors: [detailBehavior, ortherBehavior] data: { anyDataInThisComponent: {}, ...{} as DetailBehavior['data'] & BehaviorOrthers['data'] }, methods: { ...{} as DetailBehavior['methods'] & BehaviorOrthers['methods'] ortherSelfMethod(){ }, } })
使用typescript开发behavior,调用data 的数据过不了类型检测怎么办?1、创建一个behavior,并在组件中引入这个behavior,调用behavior里的data和方法 都会报错不存在该属性或者方法;虽然是可以用as any 就可以调用到,但是有没有更好的解决方法呢? [图片] 2、在组件中引入这个behavior,调用behavior里的data和方法 都会报错不存在该属性或者方法; [图片]
02-01老哥,我用的你的方法,中文+emoji混合解析出来的串再显示的中文部分会是乱码,英文+emoji就不会,难道是只针对emoji解析的?
微信小程序 如何把使用MD5加密emjoy字符串,比如'Stefan👣'最近在获取到微信的昵称后,需要使用MD5加密传给后台,但是发现小程序直接使用可以加密中英文的md5.js来加密还有emjoy字符串的昵称,与服务器的加密不一致。有想法把emjoy字符串转成base64,但是发现没有emjoy字符串base64转换的js,所以想咨询一下,emjoy字符串在小程序中,改如果进行MD5加密或者改怎么转换成base64
2018-11-19