2

我有一个这样的方法装饰器:

export function NumberMethodDecorator(message: string) {
  return (target: object, propertyKey: string, descriptor?: TypedPropertyDescriptor<any>) => {
    // do some stuff here
  }
}

我想像这样应用它:

class SomeClass {

  @NumberMethodDecorator("do some cool stuff")
  public someMethod(value: number) {

  }

}

但是,我想确保NumberMethodDecorator仅适用于带有签名的方法(value: number) => any

我怎样才能做到这一点?

4

1 回答 1

1

在 的类型参数中指定TypedPropertyDescriptor

export function NumberMethodDecorator(message: string) {
  return (
    target: object, propertyKey: string,
    descriptor?: TypedPropertyDescriptor<(value: number) => any>
  ) => {
    // do some stuff here
  };
}

然后在使用时:

class SomeClass {
  @NumberMethodDecorator("") // ok
  someMethod(value: number) {

  }

  @NumberMethodDecorator("") // compile error
  otherMethod() {
  }
}
于 2017-04-27T23:14:30.520 回答