javascript - 带有 ES3 输出的 Typescript ES7 描述符?

标签 javascript typescript

在查看这些问题之后,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/

相关文章:

javascript - AngularJS - 如何访问对象中的数组以在 ng-bind 中使用

javascript - 如何在同一模板上显示项目总数和项目限制列表

javascript - 使用 forEach、[].forEach.call(...) 或 Array.prototype.slice.call(...).forEach 迭代类似数组的对象?

node.js - 使用 multer 和 typescript : Property 'file' does not exist on type 'Request' . ts(2339)

interface - TypeScript 中的复杂接口(interface)

javascript - 属性在 Typescript 接口(interface)上不存在

typescript - tslint指出的 "as syntax"是什么?

javascript - 对于标题背景,Javascript 渲染速度是否比直接图像快?

javascript - Node js在HTTP请求中接收文件

angular - 将数组绑定(bind)到模板中的组件仅在页面加载时起作用