Я вошел только для того, чтобы проголосовать за тебя. Это IMO - лучшее решение, которое сработало для меня. Код VS служил ошибкой до этого. Благодарю вас!

ел бы использовать оператор распространения ES6 для преобразования NodeList в массив. Мой проект использует TypeScript и выдает ошибку.

const slides = [...document.querySelectorAll('.review-item')];

Вот ошибка, которая выбрасывается,ошибка TS2461: тип 'NodeListOf' не является типом массива

Этот код возможен в Вавилоне. Это возможно в TypeScript или мне нужно использовать другой метод, какObject.keys()?

Ответы на вопрос(1)

Решение Вопроса

Синтаксис распространения используется с итерациями, которыеNodeListOf является.[...document.querySelectorAll('...')] допустимо в ES6 (до тех пор, пока итерации DOM поддерживаются браузером или заполнены).

Проблема специфична для TypeScript, который не строго соответствует спецификациям ES с целевым уровнем ES5 и ниже. Синтаксис распространения по умолчанию ограничен массивами, и

[...document.querySelectorAll('...')];

транспортируется в

document.querySelectorAll('...').slice();

Это приведет к ошибке, и система типов выдаст ошибку при компиляции.

Одним из способов является использованиеArray.from (может быть заполнен в среде ES5) для преобразования итерируемого в массив:

[...Array.from(document.querySelectorAll('...'))];

Другой способ - включитьdownlevelIteration опция компилятора, Это заставляет TypeScript 2.3 и выше обрабатывать итерации в соответствии со спецификациями ES с целью ES5 и ниже:

Обеспечить полную поддержку итераций для распространения, деструктуризации при нацеливании на ES5 или ES3.

DOM.Iterable должно быть указано вlib Опция компилятора для включения подходящих наборов. Поскольку итераторам DOM требуется поддержка браузера, они могут быть заполнены в старых браузерах с помощьюcore-js.

 BBi720 окт. 2018 г., 05:06
Я вошел только для того, чтобы проголосовать за тебя. Это IMO - лучшее решение, которое сработало для меня. Код VS служил ошибкой до этого. Благодарю вас!
 Porkopek19 апр. 2018 г., 12:13
Изменение уровня у меня сработало. Спасибо
 estus01 дек. 2017 г., 03:44
@ jfriend00 Я дважды проверил, и да, вы правы в MS, похоже, Edge до сих пор не поддерживает итерации DOM, они должны быть заполнены.
 jfriend0001 дек. 2017 г., 03:08
Вы уверены, чтоquerySelectorAll() является допустимым итерируемым во ВСЕХ браузерах, которые поддерживают распространенный синтаксис? Меня не удивило бы, если бы был отстающий из Редмонда.

Ваш ответ на вопрос