类型脚本装饰器错误TS1241:作为表达式调用时,无法解析方法装饰器的签名

时间:2018-06-25 09:02:41

标签: typescript

我正在用javascript学习装饰器。我使用typecrip进行编译 下面是代码:

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }

    @enumerable(false)
    greet() {
        return "Hello, " + this.greeting;
    }
}


function enumerable(value: boolean) {
    return 
    function(target:any,propertyKey:string,descriptor:PropertyDescriptor) {
    descriptor.enumerable = value;
    };
}

实际上,代码来自http://www.typescriptlang.org/docs/handbook/decorators.html 使用tsc编译文件时,发生以下错误:

first.ts:39:5-错误TS1241:作为表达式调用时,无法解析方法装饰器的签名。 39 @enumerable(false) 我该怎么办

2 个答案:

答案 0 :(得分:1)

您遇到了自动插入;的经典JS问题。该行上的单个return表示return;并退出该函数,因此enumerable函数的返回类型为void。将返回函数与return放在同一行:

function enumerable(value: boolean) {
    return function(target:any,propertyKey:string,descriptor:PropertyDescriptor) {
    descriptor.enumerable = value;
    };
}

如果您的编辑器支持,Typescript 2.9将突出显示未使用的函数,并且由于Identifier expected.被视为函数声明,并且装饰器(function)中也应出现错误。需要一个名字。

答案 1 :(得分:0)

即使我的tsconfig.json文件将此内容包含在compileOptions中...

"target": "es5"

我仍然需要在终端的tsc命令中声明目标...

$ tsc myFileName.ts --target ES5 -w --experimentalDecorators

这可以防止出现编译错误,并允许我的装饰器正常运行。