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

Can't use spread operator with ternary operator

我正在尝试 运行 来自 cross-spawn 包的 spawn 命令,以编程方式使用 npm 安装一些依赖项,这些依赖项可以是汇总包,也可以是 webpack 包, 取决于变量的值 bundler

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

但是 typescript 编译器在抱怨,更具体地说是在 rollupPackages 的扩展运算符上,并显示以下消息:

Expression expected. ts(1109)

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

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

找到解决方案,而不是解构三元运算的每个变量,包装整个条件并从外部解构它效果很好,示例如下:

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