“__assign未定义” - NativeScript对象传播问题

时间:2017-02-16 03:27:53

标签: typescript nativescript spread-syntax

我在本机脚本项目上取得了很好的进展,直到发生这种情况:

JS: EXCEPTION: Uncaught (in promise): ReferenceError: __assign is not defined

这是从这行代码冒出来的:

return [...state, { ...action.payload, success: false }];

这是我的tsconfig.json

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "noEmitHelpers": true,
        "noEmitOnError": true
    },
    "exclude": [
        "node_modules",
        "platforms",
        "**/*.aot.ts"
    ]
}

Typescript似乎没有在编译源中包含它的帮助器__assign函数 - 这是它们实现对象扩展语法的方式。难道你们中的任何一个人都会知道为什么吗?

2 个答案:

答案 0 :(得分:13)

我很高兴地报告我找到了解决方法。这个GitHub repo很好地解释了事情,但这是一个快速的概述:

tsconfig.json中的标志noEmitHelpers告诉Typescript省略这些'助手' (例如__assign)在每个需要它们的文件中。

{
  "compilerOptions": {
    // changing this to false does the job, but duplicates helpers across every file
    "noEmitHelpers": false
  }
}

使用标记importHelpers(请参阅compiler options),最新的Typescript提供了更好的方法来管理它:

{
  "compilerOptions": {
    "noEmitHelpers": true,
    "importHelpers": true // better
  }
}

这会使对象传播起作用,并避免跨文件的代码重复。

您可能还需要npm install tslib --save来停止IDE错误。

答案 1 :(得分:0)

您是否尝试将"lib": "es6"添加到tsconfig?