不能使用对象流传着打字稿及@ngrx

不能使用对象流传着打字稿及@ngrx

问题描述:

我想在我的减速器@ngrx和角度与打字稿使用对象的传播,但是,我不断收到此错误在控制台:不能使用对象流传着打字稿及@ngrx

ReferenceError: __assign is not defined

这是我的代码:

case INCREMENT: { 
    return state = { 
     ...state, 
     counter: state.counter++ 
    } 
} 

但如果我这样做如下的代码,我可以就好运行代码:

case INCREMENT: { 
    return Object.assign({}, state, { 
     counter: state.counter++ 
    } 
} 

我在读another question这可能与打字稿有关,但我使用的是"typescript": "~2.2.1"

我错过了什么吗?


编辑:

添加tsconfig.js如在意见中的要求。

{ 
    "compilerOptions": { 
     "module": "commonjs", 
     "target": "es5", 
     "experimentalDecorators": true, 
     "emitDecoratorMetadata": true, 
     "noEmitHelpers": true, 
     "noEmitOnError": true, 
     "lib": [ 
      "es6", 
      "dom", 
      "es2015.iterable" 
     ], 
     "baseUrl": ".", 
     "paths": { 
      "*": [ 
       "./node_modules/tns-core-modules/*", 
       "./node_modules/*" 
      ] 
     } 
    }, 
    "exclude": [ 
     "node_modules", 
     "platforms", 
     "**/*.aot.ts" 
    ] 
} 
+2

您可能缺少打字稿排除帮手。你的tsconfig是什么样的? – Paarth

+0

@Paarth我用我的tsconfig文件更新了这个问题。我明白你想检查什么,我只是不知道该怎么做才能达到这个结果。我试图找到网上的东西,但没有奏效。 – celsomtrindade

为更老的编译目标提供未来的功能Typescript包括几个辅助函数以及任何需要它们的代码。当瞄准ES6时,对象传播和休息可以使用Object.assign,但Object.assign不是ES5规范的一部分,所以当针对ES5打字稿需要包含__assign辅助函数时。

默认情况下,此辅助函数将被包含在与其相关的任何地方。这可能会使生成的输出略微膨胀,因为即使生成的输出想要使用单个全局源,这些辅助函数也会包含多次。打字团队提供了在源代码旁边不发布这些帮助函数的选项,这样用户就不会有额外的大小,并且可以在全局或适当的时候包含这些函数。 Recently they introduced tslib as a better solution。这是一个外部库,可以提供帮助函数,但是因为它在一个位置注册为自己的包,所以捆绑商只能在最终捆绑包中包含它。

这就是为什么我问你的tsconfig.json。你已经关闭了这些助手的排放,你正在使用ES5。你需要确保助手在某处。您可以:

  1. 从tsconfig
  2. 取出noEmitHelpers: true线在执行
  3. 使用tslib的时间提供范围_Assign功能(and others)和正确地将其捆绑。

1是最简单的选项,它是两秒钟的修复工作。 3是一个很好的长期解决方案。

我会说,去选择1,除非你有一个非常好的理由不要。如果你的软件包大小受到帮助者的影响或者你想要,选项3是好的。选项2是两个世界中最差的,因为您有3,所以是多余的。