본문 바로가기
개발/JS

[Typescript] --downlevelIteration 에 대해서

by JeonJaewon 2021. 8. 9.

 

 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

 

TSConfig Reference - Docs on every TSConfig option

From allowJs to useDefineForClassFields the TSConfig reference includes information about all of the active compiler flags setting up a TypeScript project.

www.typescriptlang.org

 

https://mariusschulz.com/blog/downlevel-iteration-for-es3-es5-in-typescript

 

Downlevel Iteration for ES3/ES5 in TypeScript

TypeScript 2.3 introduced a new --downlevelIteration flag that adds full support for the ES2015 iteration protocol and for...of-loops for ES3 and ES5 targets.

mariusschulz.com

 

댓글