枚举类型为装饰器参数

时间:2016-11-08 22:20:25

标签: typescript enums typescript2.0

是否可以将枚举类型作为参数传递给装饰器函数?

export class A {
    @AsEnum(SomeEnum)
    name: string;
}

export enum SomeEnum { A, B, C}

export function AsEnum(type): any {
    return (target, propert) => {
      return {
            get: function(): Object {
                return type; // type is undefined
            },
        }
    };
}

此类型始终未定义。

1 个答案:

答案 0 :(得分:2)

问题在于您的代码顺序 如果您这样做:

console.log("the enum: ", SomeEnum);
export enum SomeEnum { A, B, C}

你会得到:

  

enum:undefined

在调用装饰器时,你需要在使用它之前放置SomeEnum的声明:

function AsEnum(type): any {
    return (target, propert) => {
      return {
            get: function(): Object {
                return type; // type is undefined
            },
        }
    };
}

enum SomeEnum { A, B, C}

class A {
    @AsEnum(SomeEnum)
    name: string;
}

当你尝试将它用于装饰时,解释器还没有评估枚举。