我需要获取不是函数的Typescript类的所有属性。我不确定是否还会修饰属性这一事实是否会使标识更快(如果Typescript提供了使用反射来标识修饰属性的任何方式?)。
最终目标是使用这些键作为关键字来查找相应的值,然后将对其进行验证(因此,示例中包括了注释)。例如:
class A {
@IsString()
foo: string = "foo";
@IsNumber()
c: number = 2;
d: ()=>...
}
let a:A = new A();
let properties = getPropertiesToValidate(a);
properties.forEach(p=>{
value = a[p];
//validate the value.
});
每个@Titian注释执行此操作的最简单,最有效的方法是创建MetaClass实例。 MetaClass反映了装饰的类,但仅存储在原始类上装饰的属性。我们将创建一个MetaClass实例,并将对应修饰类的className
设置为constructor.name
,然后将修饰后的属性添加到数组中。如果有人知道更简单的方法,请发表评论。
这是我目前打算实现的目标:
/**
* MetaClass stores the property names of the
* corresponding decorated class. These can
* then be used to lookup validation contexts
* during object validation.
*/
class MetaClass {
/**
* The name of the decorated class.
*/
public className: string;
/**
* The properties that were decorated.
*/
public properties: string[] = [];
constructor(className: string) {
this.className = className;
}
addProperty(property: string) {
if (!this.properties.includes(property)) {
this.properties.push(property);
}
}
}