downlevelIteration은 디폴트로 켜져 있지 않은 이유는 무엇입니까?
스프레드 오퍼레이터를 이용하여 ES5를 타깃으로 하는 경우...
환산하다Iterator
에 대해서Array
에러가 표시됩니다.-downlevelIteration
컴파일러 옵션.일단 켜지면 확산 연산자는 완벽하게 작동하는 것처럼 보입니다.
왜 이걸 명시할 필요가 있을까요?tslib에서 출력된 생성 코드를 추가하는 것 외에 활성화 시 단점이나 제한이 있습니까?
또 다른 예는 다음과 같습니다.N의 어레이를 동적으로 작성합니다(예: 3).
[...Array(3).keys()] // output: [0, 1, 2]
에러 메시지tsc
:
'ItableIterator' 유형은 배열 형식이나 문자열 형식이 아닙니다.컴파일러 옵션 '--downlevelIteration'을 사용하여 반복을 허용합니다.
TypeScript Playground에서 코드 및 오류 편집 및 표시
릴리스 노트와 TypeScript의 ES3/ES5용 Downlevel Repeating 기사를 읽고 이 질문에 대한 답은 다음과 같습니다.downlevelIteration
는 (설정을 통해) TypeScript가 호환성 코드 컴파일을 처리하는 방법을 결정해야 하기 때문에 비활성화됩니다(이전 버전의 Javascript를 지원).
이 문서에서 보다 장황한 설명을 통해 알 수 있듯이 TypeScript가 필요한 도우미 함수를 인라인화할지(단순하지만 프로덕션번들 사이즈가 커질 수 있음) 또는 TypeScript를 의존관계로 사용하여 외부 메서드를 호출할지를 결정해야 합니다.
자세한 내용은 TypeScript의 ES3/ES5용 Downlevel Repeation을 참조해 주십시오.또, 초기 문제에 대한 대체 솔루션도 참조해 주세요.
tl;dr: 사용자의 경우 사용Array.from(foo)
:
Array.from(Array(3).keys())
다운레벨링은 이전 버전의 JavaScript로 변환하는 TypeScript의 용어입니다.이 플래그는 오래된 JavaScript 런타임에서 새로운 개념을 통해 현대의 JavaScript가 어떻게 반복되는지 보다 정확하게 구현할 수 있도록 지원합니다.
ECMAScript 6은 몇 가지 새로운 반복 프리미티브를 추가했습니다.for / of
루프(for (el of arr)
어레이 확산([a, ...b]
인수확산(fn(...args)
, 및Symbol.iterator
.--downlevelIteration
이러한 반복 프리미티브를 ES5 환경에서 보다 정확하게 사용할 수 있습니다.Symbol.iterator
구현이 존재합니다.
이 질문에서는 어레이 확산에 관한 문제에 직면했으므로, 이 문제를 파헤쳐 봅시다.어레이의 범위를 다음에 나타냅니다.
// Make a new array who elements are 1 followed by the elements of arr2
const arr = [1, ...arr2];
설명에 따르면 ES5로 다운레벨을 설정하는 것은 쉬운 것 같습니다.
// The same, right?
const arr = [1].concat(arr2);
그러나 이는 일부 드문 경우에서 눈에 띄게 다릅니다.들어 있는 는 분산된 자체 하지만, 을 사용하여 구축한 .concat
:
// Make an array where the '1' element is missing
let missing = [0, , 1];
let spreaded = [...missing];
let concated = [].concat(missing);
// true
"1" in spreaded;
// false
"1" in concated;
downlevelIteration
Symbol.iterator
(존재하는 경우) ES 6 동작을 보다 정확하게 에뮬레이트합니다.
자세한 정보 및 예:
이 경우 기본 범위를 생성하기 위해 이 동작을 변경할 필요는 없습니다.[...Array(3).keys()]
할 수 Array.from(Array(3).keys())
tsconfig.json 파일에서 es5를 es6으로 변경하기만 하면 됩니다.
언급URL : https://stackoverflow.com/questions/53441292/why-downleveliteration-is-not-on-by-default
'programing' 카테고리의 다른 글
지시어 정의의 '바꾸기'는 어떻게 사용합니까? (0) | 2023.03.13 |
---|---|
모듈을 찾을 수 없습니다.'swiper/react'를 해결할 수 없습니다. (0) | 2023.03.13 |
오브젝트를 입수하려면 어떻게 해야 합니까?몽구스에서 오브젝트를 저장한 후 아이디? (0) | 2023.03.13 |
nextjs에서 URL 경로 이름 가져오기 (0) | 2023.03.13 |
동적 매개 변수를 사용하여 ui-module 확인 (0) | 2023.03.13 |