TypeScript эквивалент Array.from () - PullRequest
0 голосов
/ 14 апреля 2020

Есть ли Array.from() эквивалент в TypeScript ?
Или есть ли способ использовать реализацию Array.from(), найденную в браузерах?

Я пытаясь преобразовать NodeList в массив для использования методов массива.
Это то, что я бы сделал с vanilla JavaScript:

const divs = document.querySelectorAll('div');
const arrDivs = Array.from(divs);
const result = arrDivs.map(e => {...});

Array.from() недоступно в TypeScript , у него есть своя собственная реализация Array.

Так что я думаю, что мне пришлось бы привести его к Element[] или HTMLElement[] следующим образом:

const arrDivs = <HTMLElement[]>divs;

Но затем я получаю следующую ошибку:

Преобразование типа 'NodeListOf' в тип 'HTMLElement []' может быть ошибкой, поскольку ни один тип не совпадает в достаточной степени с другим. Если это было сделано намеренно, сначала преобразуйте выражение в «неизвестное». Типу 'NodeListOf' не хватает следующих свойств из типа 'HTMLElement []': pop, pu sh, concat, join и еще 14.

Итак, вместо этого мне сначала нужно наложить NodeList для unknown, а затем для HTMLElement[]:

const arrDivs = <HTMLElement[]><unknown>divs;

Это, похоже, игнорирует присущую безопасность типов TypeScript. Поэтому мне интересно, есть ли лучший или более правильный способ сделать это? Или какой-нибудь способ вызова встроенной функции Array.from(), найденной в современных браузерах?

ОБНОВЛЕНИЕ
Мой компилятор сообщает мне, что Property 'from' does not exist on type 'ArrayConstructor'.

Вот мои Опции компилятора:

"compilerOptions": {
   "sourceMap": true,
    "outDir": "dist",
    "strict": true,
    // Linting rules:
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
}

1 Ответ

1 голос
/ 14 апреля 2020

Убедитесь, что вы нацеливаетесь на ES2015 или выше в tsconfig.json:

"compilerOptions": {
   "target": "es2015"
}

Когда вы пропустите это поле, по умолчанию будет "es3", что является JS версией что Array.from это не вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...