Не удается получить отражение метаданных экземпляра класса - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь извлечь отражающие метаданные из экземпляра класса. Примеры на документах показывают, что это возможно, но я получаю undefined. Однако, если я запрашиваю метаданные из самого класса, я получаю обратно данные, как и в методе.

Например, это полный пример сценария:

import 'reflect-metadata'

const metadataKey = 'some-key'

@Reflect.metadata(metadataKey, 'hello class')
class C {
  @Reflect.metadata(metadataKey, 'hello method')
  get name(): string {
    return 'text'
  }
}

let obj = new C()
let classInstanceMetadata = Reflect.getMetadata(metadataKey, obj)
console.log(classInstanceMetadata) // undefined

let classMetadata = Reflect.getMetadata(metadataKey, C)
console.log(classMetadata) // hello class

let methodMetadata = Reflect.getMetadata(metadataKey, obj, 'name')
console.log(methodMetadata) // hello method

Моя цель - вернуть некоторые данные в classInstanceMetadata, которые позволяют мне связать их с типом класса.

1 Ответ

0 голосов
/ 13 ноября 2018

Выяснилось, что мне нужно использовать декоратор, а затем определить метаданные в прототипе цели.

import 'reflect-metadata'

const metadataKey = 'some-key'

export const Decorate = (): ClassDecorator => {
  return (target: Function) => {
    @Reflect.metadata(metadataKey, 'hello class', target.prototype)
  }
}

@Decorate()
class C {
  get name(): string {
    return 'text'
  }
}
...