@cocomuffin

Почему spread-оператор не возвращает массив из HTMLCollection?

Доброго времени суток!

Имеется следующее: есть коллекция инпутов, которую я хочу перевести в массив, чтобы потом была возможность обходить его функциями высшего порядка. При использовании для перевода в массив spread-оператора в TS возвращается та же коллекция, а не массив. При этом, в JS всё ок с этим, возвращается именно массив. С чем связано такое поведение?

https://jsfiddle.net/g31ubqet/

<input name="status"
             type="radio">
<input name="status"
             type="radio">
<input name="status"
             type="radio">


const collection = $('[name="status"]');
console.log(collection);
const spreadArray = [...collection];
const fromArray = Array.from(collection);
console.log(spreadArray);
console.log(fromArray);


Результат выполнения кода в TS:
< jQuery.fn.init(3) [input, input, input, prevObject: jQuery.fn.init(1)]
< jQuery.fn.init(3) [input, input, input, prevObject: jQuery.fn.init(3)]
< (3) [input, input, input]


Результат выполнения кода в JS:
< jQuery.fn.init(3) [input, input, input, prevObject: jQuery.fn.init(1)]
< (3) [input, input, input]
< (3) [input, input, input]


Нагуглилось, что это может быть связано с target: "es5" в TS. Т.е. надо просто поменять target в конфигах TS?
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
связано это с этим
А у объекта jQuery.fn.init (это не HTMLCollection) есть метод slicе, работу которого мы и наблюдаем.
тайпскрипт компилирует в разные версии js, а спред появился не так давно.

попробуйте target в compileOptions поменять в tsconfig.json (не углядел сразу что вы написали это в последнем предложении)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы