要在Typescript中获取类的所有非功能/修饰属性?

时间:2018-07-09 17:55:37

标签: javascript typescript

我需要获取不是函数的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);
            }
        }
    }

0 个答案:

没有答案