Typescript:如何获取类装饰器中公共字段的元数据类型信息
我正在使用反射元数据库和类型脚本装饰器 例如,我有这个类(真正的类将有更多的字段): Decorator也很合成,但在实际代码中它最终会这样做: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 } 现在它工作正常了,但我想减少样板文件。所以
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
target
是构造函数,而不是Object
。我可以通过一些“黑客”访问类密钥:
显然,它只适用于field decorator的target
,至少对我来说是这样。在这个主题中,我对整个主题进行了挖掘,并没有找到任何适合我特定目的的解决方案
所以请告诉我这是否可能,或者我遗漏了什么
请注意:
tsconfig.json
@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")