微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

在查看问题后,似乎TS应该支持ES3和装饰器,我有一个场景,我在typescript中有一个使用装饰器和目标ES5的现有代码库,但我现在需要显然支持需要ES3的IE6.

现在根据:
https://github.com/Microsoft/TypeScript/issues/4681

似乎应该支持ES3,但是如果我输出到目标ES3,我得到:

错误TS1241:当作为表达式调用时,无法解析方法装饰器的签名.
提供的参数与呼叫目标的任何签名都不匹配.

我得到0个错误,一切都在ES5中运行,所以你需要做任何事情才能让它在ES3中运行,或者它是否只是不受支持

以下是该问题的云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,descriptor: TypedPropertyDescriptor<any>): TypedPropertyDescriptor<any> {
    // do something
    return descriptor;
};

class MyClass {
    @myMethodDecorator
    myMethod(arg: string) { 
        return "Message -- " + arg;
    }
}

原文地址:https://www.jb51.cc/js/240715.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐