在查看这些问题之后,TS 应该 支持带有装饰器的 ES3,并且我有一个场景,我在 typescript 中有一个使用装饰器和目标 ES5 的现有代码库,但我现在显然需要支持需要 ES3 的 IE6。
现在根据: https://github.com/Microsoft/TypeScript/issues/4681
似乎应该支持 ES3,但如果我输出到目标 ES3,我会得到:
错误 TS1241:当作为表达式调用时,无法解析方法装饰器的签名。
提供的参数与调用目标的任何签名都不匹配。
我得到 0 个错误并且在 ES5 中一切正常,所以你需要做任何事情才能让它在 ES3 中正常工作还是它只是不受支持?
这是问题的 cloud 9 示例:
https://ide.c9.io/grofit/knockout-decorators-es3-example
只需在命令行上运行 gulp
,如果您将 tsconfig 目标更改为 es5,它将起作用。
最佳答案
看起来当你以 ES3 为目标时,方法装饰器没有得到正确支持,或者根本不支持。不幸的是,您收到的错误消息并不是很有帮助。看起来有一些 discussion关于错误信息。此外,我不清楚他们是打算在针对 ES3 时部分支持装饰器还是完全支持。
例如,如果您尝试使用针对 ES3 的方法装饰器:
function myMethodDecorator(target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>): TypedPropertyDescriptor<any> {
// do something
return descriptor;
};
class MyClass {
@myMethodDecorator
myMethod(arg: string) {
return "Message -- " + arg;
}
}
您收到报告的错误消息:
error TS1241: Unable to resolve signature of method decorator when called as an expression. Supplied parameters do not match any signature of call target.
但是,如果您尝试应用一个属性描述符,尽管您正在将它应用到一个方法中,但奇怪的是,编译器对此没有问题。这编译目标 ES3 没有错误:
function myPropertyDecorator(target: Object, propertyKey: string): void {
// something
};
class MyClass {
@myPropertyDecorator
myMethod(arg: string) {
return "Message -- " + arg;
}
}
但是,您可以通过以下方式在使用方法装饰器时将其编译为 ES3:
let myMethodDecorator: any = function(target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>): TypedPropertyDescriptor<any> {
// do something
return descriptor;
};
class MyClass {
@myMethodDecorator
myMethod(arg: string) {
return "Message -- " + arg;
}
}
关于javascript - 带有 ES3 输出的 Typescript ES7 描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34814628/