Skip to content

decorate 文档

简介

ts
function decorate(decorator: any, target: any, key: number | string): void;

decorator 可以是单个装饰器函数,或者多个装饰器函数的数组。

target 则是具体被装饰的类。

key 的类型取决于是构造函数参数还是实例属性/实例方法。 当装饰器作用于构造函数参数时,key 是 number 类型,代表参数的索引位置。 当装饰器作用于实例属性/实例方法时,key 是 string 类型,代表实例属性名称/实例方法名称。

示例

手动装饰构造函数参数

ts
class B {}
class A {
  constructor(b: B) {
    this.b = b;
  }
}

// 代表对A的构造函数的第一个参数使用@Inject(B)装饰器
decorate(Inject(B), A, 0);

上面的例子相当于如下代码:

ts
class B {}
class A {
  constructor(
    @Inject(B)
    public b: B
  ) {}
}

手动装饰实例属性

ts
class B {}
class A {
  public b!: B;
}

// 代表对A的实例属性b使用@Inject(B)装饰器
decorate(Inject(B), A, 'b');

上面的例子相当于如下代码:

ts
class B {}
class A {
  @Inject(B)
  public b!: B;
}

同时使用多个装饰器

ts
class B {}
class A {
  public b!: B;
}

// 代表对A的实例属性b使用@Inject(B)+Self()+Optional()装饰器
decorate([Inject(B), Self(), Optional()], A, 'b');

上面的例子相当于如下代码:

ts
class B {}
class A {
  @Inject(B)
  @Self()
  @Optional()
  public b!: B;
}