TypeScript类方法如何支持传入箭头函数修改属性后执行保存
实现方案
这个需求完全可以实现,只需要调整save方法的参数逻辑,支持传入回调函数即可。
改造后的类代码
export class myClass { a = 'bar'; b = 0; // 定义方法重载,保证TS类型提示正常 save(): void; save(updateFn: (instance: myClass) => void): void; save(x: any = null): void { // 如果传入的是回调函数,先执行回调修改当前实例属性 if (typeof x === 'function') { x(this); } // 原有保存所有属性的逻辑 //... } }
调用说明
改造完成后即可直接使用你期望的调用形式:
this.foo.save(c => c.b = 3)
回调的参数c就是当前myClass的实例,你可以在回调内一次性修改多个属性,回调执行完成后才会触发原有保存逻辑。相比你之前的两种写法,该方案还保留了完整的TS类型提示,不会丢失类型校验能力。
内容的提问来源于stack exchange,提问作者Ben Robinson
相关产品推荐
相关产品推荐

