【问题标题】:Migrating Coffescript to ES2015 code (Meteor code)将 Coffescript 迁移到 ES2015 代码(Meteor 代码)
【发布时间】:2026-01-25 05:00:02
【问题描述】:

我正在将一些代码从 Coffescript 迁移到 ES2015。我希望转译的结果如下所示:

Meteor.users.deny({
  update: function() {
    return true;
  }
});

在 Coffescript 中,这样做:

Meteor.users.deny
    update: ->
        true

是否可以在 ES2015 中对此进行编码,以便输出与原始代码匹配?

附录:

这是我在 babel 上尝试的,勾选了 Evaluate

   Meteor.users.deny({
         update: function () {
              return true;
         }
    });

Meteor.users.deny({
      update: () => true
});

两者都输出:

Meteor.users.deny({
     update: function update() {
          return true;
     }
});

匿名函数被命名(更新)

那么为什么这是一个“问题”?我正在尝试理解 ES2105,而我在 Coffeescript 中可以轻松完成的事情在 ES2015 中似乎是不可能的。我试图确认 - 或者看看我是否在滥用 ES2015 或缺少它的功能

This question is similar 但确实解决了我想要做的事情。任何指导将不胜感激

【问题讨论】:

  • 您尝试了哪些 ES6 代码但不起作用?请向我们展示你的尝试(以及你的 babel 标志)。
  • 您的第一个 sn-p 已经是有效的 ES6 代码,可以准确地转换为该代码。它有什么问题?
  • 你无法避免函数在 ES6 中被命名。如果您在 ES6 引擎中评估这样的方法定义,它将产生一个命名函数,这就是 Babel 试图重现的内容。看看2ality.com/2015/09/function-names-es6.html
  • 感谢@Bergi,这正是我正在寻找的信息

标签: meteor ecmascript-6 babeljs


【解决方案1】:

我认为它应该是这样的:

Meteor.users.deny({
  update: () => true;
});

deny 是一个接收对象作为参数的函数。您的代码将 deny 设置为一个新函数。

【讨论】:

  • 感谢您回复 Eliezer。当我通过 babel 运行该代码时,它仍然会出现名为 update() 的函数。这在 Coffeescript 中很容易做到,而在 ES2015 中则令人沮丧......
  • 你甚至没有问题。当您输入原始 JS 时,一切都按预期进行
  • 阅读此处了解更多信息:kangax.github.io/nfe 但您没有问题,或者您没有明确问题所在。该代码将按预期工作。可以给匿名 JS 函数起名字
  • 我同意最初的问题并不像它本来可以的那样清楚。为了更清晰,我已经对其进行了编辑
  • 你的问题是什么?具有名称的匿名函数不应该成为问题。为什么这对你来说是个问题?