模型上的TypeScript自定义装饰器

时间:2016-02-11 13:44:33

标签: javascript typescript

我有一个课程如下:

class Person {
   @indexField
   id : number;
   name : string;
}

现在我想实现一个方法(nevermind design,只是一个例子) - 这将允许我动态获取索引字段。

所以,

    class Person {
       @indexField
       id : number;
       name : string;

       public function getIndex(){
          //Find which property is marked with "@indexField" and dynamically return value.
       }
   }

这些例子让我有些困惑:https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript#decorators

在模型中会出现什么样的方法?

function indexField(target, key, descriptor) {
    getObjectInstanceSomehow().setIndexerField(key); //?
}

1 个答案:

答案 0 :(得分:1)

这是怎么回事?

function indexField(target, propertyKey) {

    console.log("Index property is: ", propertyKey);
    target.indexKey = propertyKey
}

class Person {
    @indexField
    id:number;
    name:string;

    getIndex() {
        return this['indexKey'];
    }
}

let p = new Person();
console.log(p.getIndex()); // prints "id"

[Playground]

这只是一个例子。您可以随意存储索引propertyKey

资源: