cel*_*ade 1 typescript ngrx ngrx-store
我试图在我的减速器上使用 Object Spread 和 @ngrx 以及 Angular 和 TypeScript,但是,我不断在控制台中收到此错误:
引用错误:__assign 未定义
这是我的代码:
case INCREMENT: {
return state = {
...state,
counter: state.counter++
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我按照下面的代码执行,我可以很好地运行代码:
case INCREMENT: {
return Object.assign({}, state, {
counter: state.counter++
}
}
Run Code Online (Sandbox Code Playgroud)
我在另一个问题中读到这可能与打字稿版本有关,但我正在使用"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"
]
}
Run Code Online (Sandbox Code Playgroud)
为了向旧的编译目标提供未来的功能,Typescript 包含了几个辅助函数以及任何需要它们的代码。对象扩展和休息可以在针对 ES6 时使用Object.assign,但Object.assign不是 ES5 规范的一部分,因此当针对 ES5 时,打字稿需要包含__assign辅助函数。
默认情况下,此辅助函数将包含在其相关的任何位置。这可能会稍微夸大生成的输出,因为即使生成的输出想要使用单个全局源,这些辅助函数也会被多次包含。Typescript 团队提供了不与源代码一起发布这些辅助函数的选项,这样用户就不会拥有额外的大小,并且可以全局或在适当的时候包含这些函数。最近他们推出了 tslib 作为更好的解决方案。这是一个您可以包含的外部库,它将提供帮助器函数,但因为它在一个地方注册为自己的包,所以捆绑器只能在最终包中包含它一次。
这就是我要求您提供 tsconfig.json 的原因。您已经关闭了这些助手的发射并且您正在使用 ES5。您需要确保帮助者以某种方式存在。您可以:
1 是最简单的选项,只需两秒即可修复。3是一个很好的长期解决方案。
我建议选择选项 1,除非你有充分的理由不这样做。如果您的捆绑包大小受到助手的影响或者您愿意,选项 3 是不错的选择。选项 2 是两全其美的,而且是多余的,因为你有 3 个选项。
您可以保留,noEmitHelpers: true但应该包括importHelpers: true.
| 归档时间: |
|
| 查看次数: |
982 次 |
| 最近记录: |