2016-10-28 7 views
1

나는 타이프이 쓰기, 그것은 생산타이프 라이터는 -> ES5 문제

> [...Array(10)].map((item) => 0); 
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] 

일단 자바 스크립트 transpilied :

노드의 콘솔에서
const mask = [...Array(10)].map((item) => 0); 

가 10 제로의 배열을 생산

var mask = Array(10).slice().map(function (item) { return 0; }); 

그러나 이것은 같지 않습니다.

> Array(10).slice().map(function (item) { return 0; }) 
[ , , , , , , , , , ] 

필자는 타이프 스크립트가 iso-functional 코드를 생성한다고 생각하고있었습니다. 내가 틀렸어? TS가 생산하는 모든 것에주의를 기울여야합니까?

I이 구성에 1.20150623.0 TSC 노드 V7을 사용하고 :

{ 
    "compilerOptions": { 
    "emitDecoratorMetadata": true, 
    "module": "commonjs", 
    "target": "ES5", 
    "outDir": ".tmp/js", 
    "rootDir": "js" 
    } 
} 
+1

내가 ** **이, 재현 할 수 있지만 : 당신의 TS는, 복사 및 붙여 넣기, 잘 작동합니다. JS 양식의'map'은 실패했지만, 그렇게해서는 안됩니다. 우스운 일이 벌어지고 있습니다. – ssube

+1

@ssube : JS가 예상대로 작동하고 있습니다. '.slice()'메서드는 Array의 구멍을 무시하므로 원본을 정확하게 표현합니다. [22.1.3.22 Array.prototype.slice (시작, 끝)] (http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.slice), 특히 점 15 (d), 여기서 * kPresent *는 현재 색인의 * HasProperty * 결과입니다. –

+0

@squint 정확히는'slice' _does_은 빈 배열 10 개가있는 동일한 배열을 제공합니다. 그러나,'.map'은 그것들을 함수의 "기능적"패밀리로 무시합니다. - forEach','map','reduce','some' 등은 존재하는 배열의 값을 넘기 만합니다. – vlaz

답변

2

이것은 타이프 2.1에서 해결되어야 known and open issue with TypeScript이다.

다음 코드

[...(new Array(5))] 

내로 번역 :

(new Array(5)).slice(); 

그러나, ES6 의미는 동일하지 않다. 아래의 출력을 참조 :

> [...(new Array(5))] 
[ undefined, undefined, undefined, undefined, undefined ] 
> (new Array(5)).slice(); 
[ , , , , ] 

예상 동작 :

Array.apply(null, Array(5)) 
관련 문제