https://kotlinlang.org logo
Title
l

lewik

10/13/2017, 6:42 PM
Не получается итерировать нативную Map из js в цикле for. Я ее помечаю как kotlin.collections.Map. Браузер ругается на то, что
entries.iterator is not a function
Втыкать итератор или есть готовое решение?
i

ilya.gorbunov

10/13/2017, 6:51 PM
Думаю не надо кастить ее kotlin.collections.Map, т.к. она ею не является
Можно скастить к dynamic (
.asDynamic()
) и тогда можно будет использовать экстеншен
dynamic.iterator()
l

lewik

10/13/2017, 7:05 PM
@ilya.gorbunov А как вообще... по-хорошему это должно быть? Вы планируете потратить разработать классы/external для интеграции с js? Или планируется что сразу все приложение на котлине будет?
Я как понимаю, итератор нужен самому компилятору котлина.
i

ilya.gorbunov

10/13/2017, 7:26 PM
Для нативной Map должна быть декларация external class или external interface, которая содержит функцию
iterator()
У нас в stdlib-js такой декларации нет, т.к. Map — это класс из ES6, а у нас таргет это ES5.
l

lewik

10/13/2017, 7:35 PM
А накой es5 то? Всегда же есть бабел и прочие Тогда уж буду js в es5 компилить
не совсем я понимаю как работает external для js. Он просто сообщает котлину что такой то метод есть или он класс создает прямо в js?
i

ilya.gorbunov

10/13/2017, 8:26 PM
external только декларирует класс и его свойства/методы, но не создает
l

lewik

10/13/2017, 8:58 PM
Это в js коже как то отражается?
i

ilya.gorbunov

10/13/2017, 9:41 PM
Нет, external декларации в js-код не попадают.