您应该使用方法装饰器,而不是属性装饰器:
declare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;
function TypeRestrictedMethodDecorator(
target: Object, // The prototype of the class
propertyKey: string, // The name of the method
descriptor: TypedPropertyDescriptor<(... p:any[]) => Promise<any>>
) {
console.log("TypeRestrictedMethodDecorator called on: ", target, propertyKey, descriptor);
}
class TypeRestrictedMethodDecoratorExample {
@TypeRestrictedMethodDecorator
method(num: number): Promise<number> {
return new Promise((res, rej)=> res(10));
}
@TypeRestrictedMethodDecorator // Error
method2(num: number): number {
return 10;
}
}
样本修改自
here