Typescript: for..of with iterators

์— ๋งŒ๋“  2015๋…„ 05์›” 14์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/TypeScript

์ƒˆ๋กœ์šด sintax for (let value of values) ๊ฐ€ ๋ฐ˜๋ณต์ž์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•œ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰ :

for (let value of myMap.values()) {
    doSomething(value);
}

# 2695์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ •๋ง ์‹ค๋ง ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ Traceur ๋ฐ Babel๊ณผ ํ•จ๊ป˜ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๋Œ€์ƒ ES5์™€ ํ•จ๊ป˜ for-of๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์šฐ๋ฆฌ ํŒ€์ด Traceur์—์„œ TypeScript๋กœ ์ „ํ™˜ ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์ง€๋งŒ TypeScript์˜ ์ด๋Ÿฌํ•œ ์ œํ•œ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. TypeScript๊ฐ€ ES6์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์„ ๋ชฉํ‘œ๋กœํ•œ๋‹ค๊ณ  ๋งํ•  ๋•Œ, ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ES6 ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ES5 ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  9 ๋Œ“๊ธ€

๋Œ€์ƒ์ด ES6 ์ธ ๊ฒฝ์šฐ ์ด๋ฏธ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

interface MyMap<T> {
    values(): Iterable<T>;
}
var myMap: MyMap<string>;

for (let value of myMap.values()) {
    var s: string = value;
}

ES5 / ES3์—์„œ ์ด๊ฒƒ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • TypeScript ๊ณต๋ฆฌ ์ค‘ ํ•˜๋‚˜๋Š” type-directed emit๋ฅผํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋‚ด ๋ณด๋‚ธ ์ฝ”๋“œ๋Š” ์œ ํ˜• ์‹œ์Šคํ…œ์ด ์ฝ”๋“œ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์ž…๋ ฅ ์†Œ์Šค์˜ ๊ตฌ๋ฌธ ๋ณ€ํ™˜์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.
  • ์ „์ฒด ๋ฐ˜๋ณต์ž ์—๋ฎฌ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์€ Symbol์— ๋Œ€ํ•œ pollyfill์— ์˜์กดํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ ๋œ ์ „์ฒด ๋ฐ˜๋ณต ๋กœ์ง์€ ์‚ ์†Œ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ next ()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ฐ’์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ˜ํ™˜์— ์‹คํŒจํ•˜๋ฉด ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ถ”๊ฐ€ ๋””์ŠคํŒจ์น˜, ๋‘ ๊ฐœ์˜ ์†์„ฑ ์กฐํšŒ ๋ฐ ๋ฃจํ”„์˜ ๋ชจ๋“  ๋ฐ˜๋ณต์— ๋Œ€ํ•œ ๊ฐ์ฒด ํ• ๋‹น์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํŠนํžˆ ์„ฑ๋Šฅ ํŠน์„ฑ์—์„œ ๋ฐฉ์ถœ ๋œ ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ณ  ์†Œ์Šค์™€ ๊ด€๋ จ์ด ์žˆ๋„๋ก ์œ ์ง€ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์—์„œ์ด ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ Arrays์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. Arrays๋Š” ES5 / ES3์—์„œ์ด ์ง€์›์ด์—†๊ณ  type-directed emit๋ฅผ ์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์„ ๋ณ€ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ for ๋ฃจํ”„๋ณด๋‹ค ํ›จ์”ฌ ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฃผ์š” ๋ฌธ์ œ๋Š” ์–ด๋ ˆ์ด์˜ ๋ฃจํ”„๋ฅผ ์‚ดํŽด๋ณด๋ฉด์ด ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์š”์ธ์˜ ๊ฒฐ๊ณผ๋กœ ES3 / ES5์—์„œ๋Š” for..of ๋ฃจํ”„์—์„œ ๋ฐฐ์—ด ๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค (ํ˜„์žฌ JS ์–ธ์–ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด). ES6๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋Š” ๊ฒฝ์šฐ (์ฆ‰, ๋ฐ˜๋ณต ๊ฐ€๋Šฅ ๋ฐ ๋ฐ˜๋ณต ๊ฐ€๋Šฅ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ๋Ÿฐํƒ€์ž„ ์—”์ง„ ์ง€์› ํฌํ•จ) ๋ฐฐ์—ด, ๋ฌธ์ž์—ด, ๋งต ๋ฐ ์ง‘ํ•ฉ ๋“ฑ์— ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ˜๋ณต ๊ฐ€๋Šฅ ํ•ญ๋ชฉ์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค ...
@mhegazy ์ž์„ธํ•œ ๋‹ต๋ณ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค !!!

์ •๋ง ์‹ค๋ง ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ Traceur ๋ฐ Babel๊ณผ ํ•จ๊ป˜ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๋Œ€์ƒ ES5์™€ ํ•จ๊ป˜ for-of๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์šฐ๋ฆฌ ํŒ€์ด Traceur์—์„œ TypeScript๋กœ ์ „ํ™˜ ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์ง€๋งŒ TypeScript์˜ ์ด๋Ÿฌํ•œ ์ œํ•œ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. TypeScript๊ฐ€ ES6์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์„ ๋ชฉํ‘œ๋กœํ•œ๋‹ค๊ณ  ๋งํ•  ๋•Œ, ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ES6 ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ES5 ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

TypeScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ES6์„ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋‹ค์Œ Traceur ๋˜๋Š” Babel์„ ํ†ตํ•ด ํ•ด๋‹น ์ถœ๋ ฅ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ทธ๋ ‡๊ฒŒํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ด์ œ --downlevelIteration ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ ES3 / ES5์— ๋Œ€ํ•ด ๋ฐ˜๋ณต๊ธฐ ํ”„๋กœํ† ์ฝœ์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ # 12346์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด๊ฒƒ์€ TS 2.3์—์„œ ์ˆ˜์ •๋˜์–ด์•ผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ TS 2.3.3์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

      for (let [ i, observationPoint ] of observationPointsList.entries())
        observationPoints[ observationPoint.spot || (i + 1) ] = observationPoint;

observationPointsList ๋Š” ObservationPointModel[] ์ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฐ์ถœ๋ฉ๋‹ˆ๋‹ค.

[11:30:56]  typescript: src/models/observation-set.ts, line: 44 
            Type 'IterableIterator<[number, ObservationPointModel]>' is not an array type or a string type. 

๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์•„, ๊ทธ๋ž˜. ์ด ๋ฌธ์„œ ๋˜๋Š” # 12346์—์„œ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€ ๋™์ž‘์ด ์•„๋‹Œ ์˜ต์…˜ ๋’ค์— ์™œ ์ˆจ๊ฒจ์ ธ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ํ•ญ์ƒ ์„ ํƒ ์‚ฌํ•ญ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๊นŒ?

@lhunath ๊ทธ๊ฒƒ์€ 2.3 ์— ๋Œ€ํ•œ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

blendsdk picture blendsdk  ยท  3์ฝ”๋ฉ˜ํŠธ

DanielRosenwasser picture DanielRosenwasser  ยท  3์ฝ”๋ฉ˜ํŠธ

manekinekko picture manekinekko  ยท  3์ฝ”๋ฉ˜ํŠธ

weswigham picture weswigham  ยท  3์ฝ”๋ฉ˜ํŠธ

kyasbal-1994 picture kyasbal-1994  ยท  3์ฝ”๋ฉ˜ํŠธ