2017-02-16 6 views
2

내가 네이티브 스크립트 프로젝트에 좋은 진전을 보이고 있었다 비애 :는 "__assign은 정의되지 않은"- NativeScript 개체의 확산이 일어난 때까지

이 코드 줄에서 위로 버블 링됩니다 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이 컴파일 된 소스에 포함되어 있지 않은 것처럼 보입니다. 이는 객체 스프레드 연산자를 구현하는 방식입니다. 좋은 사람들이 왜 그런지 알겠습니까?

답변

6

나는이 문제에 대한 해결책을 찾았습니다. 이 GitHub repo는 아주 능숙하게 일을 설명하지만, 여기에 빠른 개요입니다 : tsconfig.json에서

플래그 noEmitHelpers은 타이프 라이터이 '도우미'를 생략 알려줍니다 (예 : __assign)을 필요로 모든 파일입니다.

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

최신 타이프는 플래그 importHelpers을 (compiler options 참조)를 사용하여이 문제를 관리 할 수있는 더 좋은 방법을 제공합니다

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

이 객체의 확산 작업을 진행하고, 파일에서 코드 중복을 피할 수 있습니다.

IDE 오류를 중지하려면 npm install tslib --save이 필요할 수도 있습니다.

+0

es6 로의 변경 사항을 알고 계셨습니까? 전체 tsconfig를 보여줄 수 있습니까? –

+0

es6으로 변경할 필요는 없습니다. 객체 스프레드는 es5에서 쉽게 구현됩니다. –

+1

당신의 의견이 나에게 오해의 소지가있는 것 같아서 이것을 명확히하기 위해 Object Spread는 es6/es2015 기능입니다. 그러나 tsconfig의 대상은 입력이 아닌 출력을 정의하므로 중요하지 않습니다. 중요한 점은 tsconfig의 라이브러리 속성에서 정의한 라이브러리입니다. 제 경우에는 "es6"과 올바른 참조 입력을 참조 문헌에 추가해야했습니다. –

0

"lib": "es6"을 tsconfig에 추가 했습니까?

+0

그 플래그는 나를 위해 컴파일 타임 오류가 발생했습니다 :'node_modules/@angular/platform-browser/src/browser/browser_adapter.d.ts (14,16) : error TS2304 : 'Node' . ' –

+0

당신도 DOM 라이브러리를 원한다고 들린다. - ""lib : [ "es6", "dom"]' – bcherny

+0

나는 "lib"플래그의 변형을 시도했다. Nativescript는 그들 중 어떤 것도 좋아하지 않습니다 (적어도 내가 사용한 종자 프로젝트). 나는 여러분이'__assign'을 포함 할 플래그가 필요 없다고 확신합니다 - 타이프트 놀이터는 그것을 아주 행복하게 생성합니다. 모듈 시스템에 문제가 있습니다. 컴파일 된 출력에 필요한 파일 하나만 필요로하는 모든 파일에 대해'__assign'을 생성하는 것이 적절하지 않다고 생각합니다. 어떻게 이것이 네이티브 - 스크립트로 떨어지는 지 알지 못합니다. –