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,
}
确保您在tsconfig.json
中定位到ES2015或更高版本:
"compilerOptions": {
"target": "es2015"
}
省略该字段时,it defaults to "es3"
是JS版本,表示"es3"
不是问题。