【问题标题】:JavaScript ECMAScript 6 - ERROR: "You can only use decorators on an export when exporting a class"JavaScript ECMAScript 6 - 错误:“导出类时只能在导出中使用装饰器”
【发布时间】:2016-10-18 16:01:27
【问题描述】:

我正在尝试在 ECMAScript 6 中导出一个函数,以便我可以导入它并在其他文件中使用它以获得 DRY 代码。

但是,我收到以下错误:

在解析文件时导出类 (16:0) 时,您只能在导出中使用装饰器:

@idempotent
export function totalItems() {
    this.cart.items.forEach((dish) => total += item.qty);
    return total;
}

我该如何解决这个问题?

【问题讨论】:

  • 你在使用 Babel 吗?如果是这样,请指定并添加适当的标签。
  • 使用Ionic2,没关系,Babel 只是遵守代码..
  • 这个错误不是来自编译器吗?它看起来像是在 Babel 的源代码中定义的。上面的行是否定义了您需要包含的装饰器?如果您提供a minimal, complete, verifiable example,会更容易提供帮助。请在以后这样做。
  • 装饰器不是 ES6。它们是对未来版本的 ECMAScript 的提议,一些编译器选择以不一致的非标准化方式实现这些版本(使您选择的编译器非常相关)。根据the proposal,它们只会被类支持,而不是独立函数。那是你的问题。但是这篇文章甚至不包括导致错误的代码(没有可见的装饰器)。这篇文章需要暂停,直到/除非它可以完成。
  • 此导出之前的行中有什么。你真的想装饰那个/一个功能吗?

标签: javascript angular ecmascript-6 ionic2


【解决方案1】:

不支持您尝试执行的操作。 decorator proposal(尚未标准化)仅包含用于类定义及其方法的@decorators,而不用于函数定义。

您可能希望创建一个函数装饰器/包装器函数,以便像这样使用:

export const totalItems = idempotent(function() {
    let total;
    this.cart.items.forEach((dish) => total += item.qty);
    return total;
});

【讨论】:

    【解决方案2】:

    如果你想导出一个函数,那么你必须像这样添加到特定的类中:

    export class GeneralFunctions
    {
         totalItems() {
             this.cart.items.forEach((dish) => total += item.qty);
             return total;
         }
    }
    

    在您想使用该函数的地方,只需导入该类并为其创建一个对象,然后使用该对象调用该函数,如下所示:

    import {GeneralFunctions} from "./<your-file>";
    
    var obj : GeneralFunctions 
    obj.totalItems();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 2018-01-22
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多