【问题标题】:Babel Decorators: Is it Possible to Create an "@export" Decorator?Babel 装饰器:是否可以创建“@export”装饰器?
【发布时间】:2017-02-04 04:24:42
【问题描述】:

我是“ES7”装饰器的新手(我的意思是由最初基于 ES7 装饰器提案的 Babel babel-plugin-transform-decorators-legacy 插件启用的装饰器),我对如何他们工作。我知道方法装饰器会修改方法,但我不清楚在此过程中会发生什么“副作用”。具体来说,我想知道装饰器是否可以生成export,即。我可以做一个这样的装饰器吗:

class Foo {
    @export
    bar() { doSomething(); }
}

生成:

export const bar = Foo.prototype.bar;
// or
export const bar = new (Foo()).bar;

或者:

class Foo {
    @export
    static bar() { doSomething(); }
}

到:

export const bar = Foo.bar;

简而言之,装饰者可以创建export 语句吗?

【问题讨论】:

  • 导出应该在模块的顶部声明,以便它们可以静态分析。因此,即使您可以(它可能需要一些用于转译器的 hacky 插件,例如 Babel),您真的不应该这样做。
  • 你为什么要导出一个方法?
  • 一个模块可能会暴露一些东西,就好像它是一个静态函数一样,但是(在幕后)将该函数实现为(单例)对象的方法可能更有意义。

标签: decorator ecmascript-next babel-decorator


【解决方案1】:

不,不能动态创建出口声明。充其量,您可以动态创建一个包含它们的模块文件。

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 2017-11-16
    • 2016-02-21
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2012-01-20
    • 2016-02-05
    相关资源
    最近更新 更多