相当于Array.from()的TypeScript

问题描述 投票:-2回答:1

TypeScript中是否有Array.from()等效项?或者,是否可以使用浏览器中的Array.from()实现?

我正在尝试将NodeList转换为数组以使用数组方法。这就是我要使用普通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,push,concat,join和14更多。

因此,我不得不首先将NodeList转换为unknown,然后转换为HTMLElement[]

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

这似乎无视TypeScript的固有类型安全性。所以我想知道是否存在更好或更正确的方法?或以某种方式调用现代浏览器中的本机Array.from()函数?

UPDATE我的编译器告诉我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,
}
javascript arrays typescript dom
1个回答
1
投票

确保您在tsconfig.json中定位到ES2015或更高版本:

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

省略该字段时,it defaults to "es3"是JS版本,表示"es3"不是问题。

© www.soinside.com 2019 - 2024. All rights reserved.