javascript - TypeScript ekvivalent Array.from()
Existuje v TypeScriptu ekvivalent Array.from()?
Nebo je nějaký způsob, jak použít implementaci Array.from(), která se nachází v prohlížečích?
Snažím se převést NodeList na pole, abych mohl použít metody polí.
Toto bych udělal s čistým JavaScriptem:
const divs = document.querySelectorAll('div');
const arrDivs = Array.from(divs);
const result = arrDivs.map(e => {...});
Array.from() není k dispozici v TypeScriptu, má vlastní implementaci Array.
Takže si myslím, že bych to musel převést na Element[] nebo HTMLElement[] takto:
const arrDivs = <HTMLElement[]>divs;
Ale pak dostanu následující chybu:
Konverze typu 'NodeListOf' na typ 'HTMLElement[]' může být chybou, protože žádný z typů se dostatečně nepřekrývá s tím druhým. Pokud to bylo úmyslné, nejprve převeďte výraz na 'unknown'. Typ 'NodeListOf' postrádá následující vlastnosti typu 'HTMLElement[]': pop, push, concat, join a dalších 14.
Takže pak musím nejprve převést NodeList na unknown a pak na HTMLElement[]:
const arrDivs = <HTMLElement[]><unknown>divs;
To vypadá, že ignoruje inherentní typovou bezpečnost TypeScriptu. Takže mě zajímá, jestli existuje lepší nebo správnější způsob, jak to udělat? Nebo nějaký způsob, jak zavolat nativní funkci Array.from() nalezenou v moderních prohlížečích?
AKTUALIZACE
Můj kompilátor mi říká, že Vlastnost 'from' neexistuje u typu 'ArrayConstructor'.
Zde jsou mé možnosti kompilátoru:
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
// Linting rules:
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
}
Odpověď č. 1
Ujistěte se, že cílíte na ES2015 nebo vyšší v tsconfig.json:
"compilerOptions": {
"target": "es2015"
}
Když toto pole vynecháte, výchozí hodnota je "es3", což je verze JS, ve které Array.from neexistuje.
Odpověď č. 2
Toto mi fungovalo
Použijte //@ts-ignore nad řádek Array.from(divs).
Spusť kód.
