导入使用“import * as x”作为默认参数的函数

时间:2018-05-30 17:23:55

标签: javascript ecmascript-6

所以我正在看一些似乎可行的JavaScript代码,但事实并非如此。在一个模块中,有一个函数导入一组帮助程序来curry / decorate(?)它自己要导出的函数字典,但是将它指定为默认值,而不是直接使用import:

import * as curry from './curry-module.js'

export function example(curry = curry) {
  return {
    foo: (args) => curry.foo(args),
    bar: (args) => curry.bar(args),
  }
}

这里的动机似乎是允许你在模拟或测试时提供不同的currying捆绑,或者默认使用真正的咖喱功能。

但是如果我将这个函数导入另一个模块并在没有参数的情况下调用它,则不会使用默认值并且会出现未定义的错误:

import { example } from './example-module.js'

// within example(), curry is undefined and throws an error
example().foo(someArgs) 

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

在我的特定情况下,问题是导入和参数变量名称相同。它为转换器创建了歧义,我最终得到了这样的ES5代码:

var curry = require('./curry-module.js')

function example() {
    var curry = arguments.length > 0 && arguments[0] !== undefined 
      ? arguments[0] 
      : curry;
}

因此curry被重新声明,使其未定义,然后在没有传入参数时分配给自己。并且永远不会使用外部范围中的curry

将函数的参数名称更改为与导入名称不同的是此处的修复。