不能使用对象流传着打字稿及@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"
]
}
为更老的编译目标提供未来的功能Typescript包括几个辅助函数以及任何需要它们的代码。当瞄准ES6时,对象传播和休息可以使用Object.assign
,但Object.assign
不是ES5规范的一部分,所以当针对ES5打字稿需要包含__assign辅助函数时。
默认情况下,此辅助函数将被包含在与其相关的任何地方。这可能会使生成的输出略微膨胀,因为即使生成的输出想要使用单个全局源,这些辅助函数也会包含多次。打字团队提供了在源代码旁边不发布这些帮助函数的选项,这样用户就不会有额外的大小,并且可以在全局或适当的时候包含这些函数。 Recently they introduced tslib as a better solution。这是一个外部库,可以提供帮助函数,但是因为它在一个位置注册为自己的包,所以捆绑商只能在最终捆绑包中包含它。
这就是为什么我问你的tsconfig.json。你已经关闭了这些助手的排放,你正在使用ES5。你需要确保助手在某处。您可以:
- 从tsconfig
- 取出
noEmitHelpers: true
线在执行 - 使用tslib的时间提供范围_Assign功能(and others)和正确地将其捆绑。
1是最简单的选项,它是两秒钟的修复工作。 3是一个很好的长期解决方案。
我会说,去选择1,除非你有一个非常好的理由不要。如果你的软件包大小受到帮助者的影响或者你想要,选项3是好的。选项2是两个世界中最差的,因为您有3,所以是多余的。
您可能缺少打字稿排除帮手。你的tsconfig是什么样的? – Paarth
@Paarth我用我的tsconfig文件更新了这个问题。我明白你想检查什么,我只是不知道该怎么做才能达到这个结果。我试图找到网上的东西,但没有奏效。 – celsomtrindade