type ts2339 property not exist error does typescript ecmascript-6

property - TypeScript | Array.from | error TS2339: la propiedad ''from'' no existe en el tipo ''ArrayConstructor''



property does not exist on type angular 5 (3)

Estaba buscando en Google, pero no puedo encontrar la información sobre qué y cómo debo agregar a mi proyecto para permitirme usar métodos ES6 como Array.from

__ EDITAR: palabra prototipo eliminado


Espero que no sea un tema demasiado tedioso, pero encontré esto mientras refactorizaba js a ts, y si tiene una matriz como, parece que funciona simplemente pasando la matriz como al constructor en lugar de usarla, eliminando la necesidad del método adicional.

p.ej

// someScript.js Array.from( arrayLikeThing );

se convierte en

// someScript.ts Array( arrayLikeThing );

Si hay otras razones para seguir usando .from, entonces las respuestas anteriores son excelentes.


Puede ampliar fácilmente los tipos existentes de esta manera:

interface Array { from(arrayLike: any, mapFn?, thisArg?): Array<any>; }

El problema aquí es que esto agregará la función a las instancias de la matriz y no como una función estática como usted lo requiere.
Pero eso se puede hacer así:

interface ArrayConstructor { from(arrayLike: any, mapFn?, thisArg?): Array<any>; }

Entonces deberías poder usar Array.from .

Pruébalo en Playground .

Editar

Si necesita realizar un relleno múltiple de la implementación (debido a que el entorno en el que desea ejecutar no lo tiene), así es como:

interface ArrayConstructor { from(arrayLike: any, mapFn?, thisArg?): Array<any>; } Array.from = function(arrayLike: any, mapFn?, thisArg?): Array<any> { // place code from MDN here }

El código de polyfill en MDN .

2ª edición

Basado en un comentario, estoy agregando una versión mecanografiada:

interface ArrayConstructor { from<T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): Array<U>; from<T>(arrayLike: ArrayLike<T>): Array<T>; }

Es una copia exacta de cómo se define en lib.es6.d.ts


Si está seguro de que la API existe en su motor en tiempo de ejecución, compile con --lib es6 (o --lib dom, es6 si está utilizando las API de DOM)

Consulte la documentación de las Opciones del compilador para más detalles.