不能将扩展运算符与三元运算符一起使用

时间:2020-07-01 13:48:50

标签: node.js arrays typescript conditional-operator destructuring

我正在尝试使用spawn软件包中的cross-spawn运行命令,以编程方式安装npm的某些依赖项,这些依赖项可以是汇总包或webpack包,具体取决于变量bundler

spawn.sync(
  'npm',
  [
    'add',
    '-D',
    'svelte',
    bundler === 'rollup' ? ...rollupPackages : ...webpackPackages
  ],
  { cwd: projectPath }
)

但是打字稿编译器在抱怨,更具体地说,在rollupPackages的散布运算符上显示以下消息:

Expression expected. ts(1109)

2 个答案:

答案 0 :(得分:0)

我假设两个包变量都是数组,并且您想将各个数组值作为自己的值添加到.sync调用参数数组中,所以请尝试将整个表达式括在括号中:

spawn.sync(
  'npm',
  [
    'add',
    '-D',
    'svelte',
    (bundler === 'rollup' ? ...rollupPackages : ...webpackPackages)
  ],
  { cwd: projectPath }
)

答案 1 :(得分:0)

找到解决方案,而不是破坏三元运算的每个变量,而是包装整个条件并从外部对其进行分解,效果很好,例如:

spawn.sync(
  'npm',
  [
    'add',
    '-D',
    'svelte',
    ...(bundler === 'rollup' ? rollupPackages : webpackPackages)
  ],
  { cwd: projectPath }
)