我可以在装饰器方法中获取变量的名称吗?

时间:2017-09-09 14:05:50

标签: javascript typescript decorator typescript-decorator

我想写一个可以检查查询中参数长度的装饰器,我有这个方法:

@httpPost("doAuth")
@ValidateSize([{login: {min: 6}}, {password: {min: 6}}])
public async auth(@requestBody("login") login :string, @requestBody("password") pass :string, @response() response :express.Response){
    let user :UserData = await this.authService.auth(login, pass);
    if(!user) return response.sendStatus(403);
    return user;
}

装饰者自己:

export function ValidateSize(param :Object) {
    return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
        return {
            value: function (...args: any[]) {
                //Here I need to get the variables login, pass that to check their length

            }
        };
    }
}

问题是args是一个带有数字索引的数组,但是我需要通过它们的名字来获取参数。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

据我所知,TypeScript编译器不会使用变量名称发出元数据。有些项目试图改进TypeScript编译器发出的内容,因此可以使用装饰器来获取有关代码的更多信息,例如:

https://www.npmjs.com/package/awesome-metadata

但是这个项目还没有发出关于功能的更多信息。

免责声明:我是这个项目的作者。