typescript装饰器

属性装饰器

  1. 参数
export default function (proto, key) {
  // 两个参数
}
  1. 给属性增加metadata
import 'reflect-metadata';
export default function (label, type?) {
  // 在装饰器内,增加元数据,能够自动加到属性上
  return Reflect.metadata("key",  value);
};

// 读取metadata
Reflect.getMetadata("key", obj, name)

访问器装饰器

  1. 能够间接的给属性增加转换器
import 'reflect-metadata';
export default function (logicTypeName: string) {
  console.log(arguments);
  return function (target: any, key: string, descriptor: PropertyDescriptor) {
    descriptor.get = function () {
      return this[logicTypeName] + "___";
    };
  };
}

export class FlowParamDesc {
  @ReaderField("逻辑类型")
  logicType?: string;
  @ReaderField("逻辑值")
  logicValue?: string;
  
  @LogicTypeGetter("logicType")
  get getLogicType() {
    return "";
  }
}

const f = new FlowParamDesc();
  f.logicType = "123";
  console.log(f);  // {"logicType":"123"}
  console.log(f.getLogicType);  // 123___
  console.log(JSON.stringify(f));  // {"logicType":"123"}

方法装饰器

posted @   fight139  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2019-11-11 css文字实例锦集
2017-11-11 提交表单
点击右上角即可分享
微信分享提示