TypeScript: отражение-метаданные получают метаданные из класса - PullRequest
0 голосов
/ 19 сентября 2019

Я использую библиотеку отражения-метаданных для хранения метаданных, относящихся к свойствам класса:

@Table({ tableName: "xyz" })
export default class User extends Model<User> {
  @Column({
    type: DataType.STRING,
    unique: "email_deletionDate_const",
  })
  @ESIndexed()
  public email: string;

  @Column(DataType.STRING)
  @ESIndexed()
  public firstName: string;
} ...

Декоратор:

export const SEQUELIZE_ES_METADATA = "sequelize:esIterable";

export const ESIndexed = () => {
  return (target, key) => {
    let currentMetadata = Reflect.getMetadata(SEQUELIZE_ES_METADATA, target);
    if (!currentMetadata) {
      currentMetadata = [];
    }
    currentMetadata.push(key);
    return Reflect.defineMetadata(SEQUELIZE_ES_METADATA, currentMetadata, target);
  };
};

Моя цель - получить всеполя, которые украшены декоратором ESIndexed ().Когда я пытаюсь получить их из экземпляра / объекта класса, это не проблема: (это работает)

Reflect.getMetadata(SEQUELIZE_ES_METADATA, new User());

Однако я не хочу каждый раз создавать экземпляр.Есть ли способ получить метаданные из самого класса (функции-конструктора)?

Что-то вроде этого не работает:

Reflect.getMetadata(SEQUELIZE_ES_METADATA, User);
...