使用反射元数据访问 class 装饰器参数

Access class decorator argument using reflect-metadata

考虑一个带有一个参数的 class 装饰器:

@TableName("Orders")
export class Order {
 // ...
}

装饰器定义为:

import "reflect-metadata";

const classDecoratorKey = Symbol.for("custom:TableName");

export function TableName(tableName: string): ClassDecorator {
  return (constructor: Function) => {
    Reflect.defineMetadata(classDecoratorKey, tableName, constructor);
  }
}

export function getTableName(target: any): string {
  return Reflect.getMetadata(classDecoratorKey, target.constructor, "class") || "";
}

我现在希望获得@TableName 值“Orders”。如何检索 class 装饰器的参数值?

let order = new Order();
getTableName(order); // "" but expected "Orders"

这是对我有用的方法

export function TableName(tableName: string): ClassDecorator {
  return (constructor: Function) => {
    Reflect.defineMetadata(classDecoratorKey, tableName, constructor.prototype);
  };
}

export function getTableName(target: any): string {
  return Reflect.getMetadata(classDecoratorKey, target) || '';
}