在 TypeScript 中,我们经常遇到需要在多个方法中执行相同的权限校验逻辑,例如先判断设备是否连接以及用户是否有权限操作。为了避免代码重复,我们可以使用装饰器来优雅地解决这个问题。

首先,定义一个装饰器函数,该函数接受两个参数:

  1. 要装饰的方法
  2. 提示信息

在装饰器函数中,我们先判断是否已连接设备和是否有权限操作设备。如果不满足条件,则弹出提示信息,否则执行原方法。

然后,在每个需要判断的方法前加上装饰器即可。

示例代码

function checkPermission(message: string) {
  return function(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args: any[]) {
      if (!this.isConnectBle()) {
        commonUtils.showToast('请先扫码连接设备');
        return;
      }
      if (!this.data.canExecute) {
        commonUtils.showToast('您无权限操作该设备');
        return;
      }
      return originalMethod.apply(this, args);
    }
  }
}

class Example {
  @checkPermission('您无权限操作该设备')
  openUpgradeChannel() {
    // 逻辑处理
  }

  @checkPermission('您无权限操作该设备')
  someOtherMethod() {
    // 逻辑处理
  }
}

优势

使用装饰器后,每个方法只需要关注自己的逻辑处理,而无需再重复写判断。同时,如果需要修改判断的逻辑或提示信息,也只需要修改装饰器函数即可,不需要修改每个方法,提高了代码的可维护性。

总结

装饰器为我们提供了一种优雅的方式来解决代码中重复的权限校验问题,使代码更加简洁易读,并提高代码的可维护性。

TypeScript 中使用装饰器优雅解决重复权限校验问题

原文地址: https://www.cveoy.top/t/topic/pfrw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录