Typescript:如何获取类装饰器中公共字段的元数据类型信息

Typescript:如何获取类装饰器中公共字段的元数据类型信息,typescript,typescript-decorator,reflect-metadata,Typescript,Typescript Decorator,Reflect Metadata,我正在使用反射元数据库和类型脚本装饰器 例如,我有这个类(真正的类将有更多的字段): Decorator也很合成,但在实际代码中它最终会这样做: function FieldTyping(target: Object, key: string) { Reflect.getMetadata('design:type', target, key) // "String" output in console for "text" key } 现在它工作正常了,但我想减少样板文件。所以

我正在使用反射元数据库和类型脚本装饰器

例如,我有这个类(真正的类将有更多的字段):

Decorator也很合成,但在实际代码中它最终会这样做:

function FieldTyping(target: Object, key: string) {
    Reflect.getMetadata('design:type', target, key)
    // "String" output in console for "text" key
}
现在它工作正常了,但我想减少样板文件。所以我想使用一个decorator并声明构造函数中的所有字段,如:

@ClassTyping
class Message {
    constructor(public text: string, public code: number) { }
}
Decorator应该迭代所有公共字段,并执行与
字段类型化
相同的工作-从reflect获取实际类型。所以我想要两件事:

  • 从班上拿到所有的钥匙。(因为我只需要
    字符串
    名称)
  • Reflect.getMetadata
    获取正确的
    target
  • 但是类decorator中的
    target
    是构造函数,而不是
    Object
    。我可以通过一些“黑客”访问类密钥:

    显然,它只适用于field decorator的
    target
    ,至少对我来说是这样。在这个主题中,我对整个主题进行了挖掘,并没有找到任何适合我特定目的的解决方案

    所以请告诉我这是否可能,或者我遗漏了什么

    请注意:

  • 我知道使用正则表达式是完全可能的,但我不想要这样丑陋的解决方案
  • 这是客户机代码,所以我无法访问文件系统并解析源代码以获取类型,例如(或者我又错过了一些东西)
  • 在我的
    tsconfig.json
  • 我的堆栈只是NPM和包裹打包机。在本地环境中使用Parcel dev server,在“生产”中使用Harp(在Heroku上)
  • @ClassTyping
    class Message {
        constructor(public text: string, public code: number) { }
    }
    
    type ConstructorType<T> = {
        new (...args: any[]): T
    }
    
    function ClassTyping<T>(target: ConstructorType<T>) {
        const obj = new target()
        const fields = Object.keys(obj)
    
        fields.map(prop => Reflect.getMetadata('design:type', target, field))
        // "undefined" output for all fields
    }
    
    Reflect.getMetadata('design:type', Message, "text")