2017-06-07 8 views
1

@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

答えて

3

古いコンパイルターゲットに将来の機能を提供するために、Typescriptにはいくつかのヘルパー関数が必要です。オブジェクトのスプレッドと休憩は、ES6を対象とするときはObject.assignを使用できますが、Object.assignはES5仕様の一部ではないため、ES5 typescriptに__assignヘルパー関数を含める必要があります。

デフォルトでは、このヘルパー機能は関連する任意の場所に含まれます。これは、生成された出力が単一のグローバルソースを使用したいとしても、これらのヘルパー関数が複数回含まれるため、生成された出力をわずかに膨張させる可能性があります。 typescriptチームは、これらのヘルパー関数をソースコードと共に放棄するオプションを提供したので、ユーザーは余分なサイズを持たず、これらの関数をグローバルに、または必要に応じて含めることができました。 Recently they introduced tslib as a better solution。これは、ヘルパー機能を提供する外部ライブラリですが、レジストラは独自パッケージとして1か所に配置できるため、バンドル担当者は最終バンドルに1回だけ含めることができます。

これは私があなたのtsconfig.jsonを要求した理由です。あなたはこれらのヘルパーの放射をオフにしており、ES5を使用しています。あなたはヘルパーが何とかそこにいることを確認する必要があります。次のいずれかが可能です。

  1. が実行
  2. 利用tslibの時に範囲内_assign機能(and others)を提供し、正確に同梱のTSconfig
  3. からnoEmitHelpers: true行を削除します。

1は最も簡単なオプションで、動作する2秒の修正です。 3は良い長期的なソリューションです。

あなたが本当に良い理由がない限り、私はオプション1に行くと言います。あなたのバンドルのサイズがヘルパーの影響を受けているか、そうしたい場合は、オプション3が良いです。オプション2は、どちらの世界でも最悪です。あなたが3人いるので冗長です。

関連する問題