Vyhledávání na webu

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.

Související články