我正在用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) 我该怎么办
答案 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
这可以防止出现编译错误,并允许我的装饰器正常运行。