带装饰符的打字稿箭头功能参数

时间:2018-10-10 18:45:32

标签: typescript annotations metaprogramming decorator arrow-functions

当前是否可以针对箭头函数中的参数使用装饰器?例如:

const func: Function = (@Decorator param: any) => { ... }

class SomeClass {
  public classProp: Function = (@Decorator param: any) => { ... }
}

WebStorm不喜欢它,编译器不喜欢它,并且找不到在线文档来暗示这是否是有效的Typescript。

我的特定问题是在类中将其用作属性,但看起来该问题也扩展到了标准变量声明。

如果这是无效的,是否有任何计划允许这样做?

1 个答案:

答案 0 :(得分:0)

在打字稿文档中,如果我对您的理解正确,那么您会在这里找到答案:https://www.typescriptlang.org/docs/handbook/decorators.html

引用相关部分

array[0]

然后按原样使用

等级Greeter {        问候:字符串;

import "reflect-metadata";

const requiredMetadataKey = Symbol("required");

function required(target: Object, propertyKey: string | symbol, parameterIndex: number) {
    let existingRequiredParameters: number[] = Reflect.getOwnMetadata(requiredMetadataKey, target, propertyKey) || [];
    existingRequiredParameters.push(parameterIndex);
    Reflect.defineMetadata(requiredMetadataKey, existingRequiredParameters, target, propertyKey);
}

function validate(target: any, propertyName: string, descriptor: TypedPropertyDescriptor<Function>) {
    let method = descriptor.value;
    descriptor.value = function () {
        let requiredParameters: number[] = Reflect.getOwnMetadata(requiredMetadataKey, target, propertyName);
        if (requiredParameters) {
            for (let parameterIndex of requiredParameters) {
                if (parameterIndex >= arguments.length || arguments[parameterIndex] === undefined) {
                    throw new Error("Missing required argument.");
                }
            }
        }

        return method.apply(this, arguments);
    }
}

}

希望它会有所帮助;)

Seb