2015-04-24 4 views
1

У меня возникла проблема с использованием последнего компилятора TypeScript 1.5 в сочетании с Map и for..of. Пример:Использование для .of с Map генерирует недопустимый ES5

var map: Map<string, string> = new Map<string, string>(); 
map.set("A", "one"); 
map.set("B", "two"); 
map.set("C", "three"); 
for(let [key, value] of map) { 
    console.log(key, value); 
} 

Согласно this, машинопись 1,5 поддерживает деструктурирующие и for..of, так что я не могу понять, почему это не должно работать, но он выдает неверную ES5:

for (var _i = 0, _a = map; _i < _a.length; _i++) { 
//        ^^^^^^^^^ 
// A Map doesn't have a length, so this block never executes 
    var _b = _a[_i], key = _b[0], value = _b[1]; 
    console.log(key, value); 
} 

I работал вокруг этого, используя map.forEach((value, key) => { ... });, но это не так хорошо, как for..of.

Является ли это ограничением выпуска 1.5? Ожидаю ли я, чтобы он переместил Map в ES5, когда он не поддерживается?

ответ

1

Синтаксис for of, который поддерживается TypeScript с целями ES3/5, очень ограничен. Истребителям нужен целевой ES6.

Является ли это ограничением выпуска 1.5?

Да:

Это работает для массивов и строк. Другие повторители не поддерживаются для ES3/ES5 (Source)

+0

Но, не пожалеете. [Код, созданный Babel для оператора 'for of', является уродливым из-за итераторов] (http://babeljs.io/repl/#?experimental=true&evaluate=false&loose=false&spec=false&playground=false&code=const%20arr%20% 3D% 20 [% 27a% 27% 2C% 20% 27b% 27]% 3B% 0Afor% 20% 28let% 20val% 20of% 20arr% 29% 0A% 20% 20console.log% 28val% 29% 3B% 0A) , – Paleo

+0

Отлично, спасибо! Ссылки источника и Babel были очень полезны – CodingIntrigue