示例代码:

    1. const PropertyDecorator: PropertyDecorator = (
    2. target: Object,
    3. propertyKey: string | symbol
    4. ) => {
    5. // 测试参数
    6. // console.log(target)
    7. // console.log(propertyKey)
    8. };
    9. const ParamsDecorator: ParameterDecorator = (
    10. target: Object,
    11. propertyKey: string | symbol,
    12. parameterIndex: number
    13. ) => {
    14. console.log(parameterIndex);
    15. };
    16. // 属性装饰器和参数装饰器
    17. class Player {
    18. // 创建一个属性
    19. // 使用一个属性装饰器
    20. @PropertyDecorator
    21. public username: string = 'admin';
    22. //参数修饰器
    23. public run(idx: number, @ParamsDecorator keywords: string): void {
    24. console.log('run方法正在被执行');
    25. // console.log(this.username)
    26. }
    27. }
    28. new Player().run(100, '小明');

    通过属性属性符来劫持属性,并且将属性值都改为小写:

    // 属性修饰符
      let value: string = 'hello,world';
        const propertyDecorator: PropertyDecorator = (
            target: object,
            propertyName: string | symbol,
        ) => {
    
            Object.defineProperty(target, propertyName, {
                get() {
            return value.toLowerCase();
          },
          set(v) {
            value = v;
          }
            });
        };
        class Player {
        @propertyDecorator
            public username: string | undefined;
        }
    
      const p = new  Player();
      console.log(p.username);
      p.username = 'ABC';
      console.log(p.username);