for-of 구문이나 배열에 대한 Spread operator 사용시에 downlevelIteration 플래그를 사용하라는 메시지가 출력된다. tsconfig의 target을 확인해 보면 es6 이전일 것이다. 이 문법들은 es6부터 지원되기 때문이다.
Type is not an array type or a string type.
Use compiler option '--downlevelIteration' to allow iterating of iterators.ts(2569)
downlevelIteration 옵션은 반복에 대한 (iteration) 타입스크립트 코드를 비교적 오래된 (down level) 자바스크립트 런타임에서도 문제 없이 수행되도록 컴파일하는 옵션이다.
만약 위에서 언급한 문법들을 단순히 인덱스만을 가지고 반복하는 for문 코드로 변환한다면, 그들의 명세와는 다르게 변환되는 드문 예외 케이스가 존재한다.
예시) 😜 와 같은 이모지 문자열의 length는 놀랍게도 2이다. for-of loop를 단순 for문으로 변환한다면 length와 index 를 기반으로 반복하므로, 오동작의 가능성이 있다.
downleveliteration은 만약 타겟으로 하는 런타임에서 Symbol.iterator를 사용할 수 있다면 이를 활용하여 명세대로 정확히 동작하도록 변환하는 옵션이다. 물론 단순 인덱스 기반 변환보다는 코드의 크기가 훨씬 커지게 된다.
참고 자료들을 아래 링크에 첨부한다. 이 글에서 소개된 예외 케이스와, 더 자세한 코드와 함께 친절하게 설명되어 있다.
https://www.typescriptlang.org/tsconfig#downlevelIteration
https://mariusschulz.com/blog/downlevel-iteration-for-es3-es5-in-typescript
'개발 > JS' 카테고리의 다른 글
[Typescript] array, object 를 literal 타입으로 변환하기 (0) | 2021.09.25 |
---|---|
새로고침 시에도 redux store 유지하기 (0) | 2021.08.25 |
[Javascript] var, let, const 의 호이스팅과 스코프 (0) | 2021.05.31 |
Javascript는 call by value일까 call by reference일까? (0) | 2021.05.21 |
댓글