TypeScript | Array.from | ошибка TS2339: свойство 'from' не существует в типе 'ArrayConstructor'

Я был googling, но не могу найти информацию о том, что и как добавить в мой проект, чтобы позволить мне использовать методы ES6, такие как Array.from

__ EDIT: удаленное прототипное слово

Ответ 1

Вы можете легко расширить существующие типы следующим образом:

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

Проблема здесь в том, что это добавит функцию к экземплярам массива, а не как статическую функцию, как вам требуется.
Но это можно сделать так:

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

Тогда вы сможете использовать Array.from.

Попробуйте это на ; } var a: any[] = Array.from([1,2,3]); rel=noreferrer>детской площадке.


редактировать

Если вам нужно заполнить реализацию (поскольку среда, в которой вы собираетесь работать, ее не имеет), то вот как:

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

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

Код полизаполнения в МДН.


2-е редактирование

На основании комментария я добавляю типизированную версию:

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>;
}

Это точная копия того, как это определено в lib.es6.d.ts.

Ответ 2

Если вы уверены, что API существует на вашем движке во время выполнения, скомпилируйте с --lib es6 (или --lib dom,es6 если вы используете DOM API).

Посмотрите документацию Опции компилятора для более подробной информации.

Ответ 3

Я надеюсь, что это не очень не по теме, но я нашел это при рефакторинге js в ts, и, если у вас есть подобный массив, похоже, он работает просто, передавая массив как в конструктор вместо использования from, устраняя необходимость в дополнительном методе.

например

// someScript.js

Array.from( arrayLikeThing );

становится

// someScript.ts

Array( arrayLikeThing );

Если есть другие причины для продолжения использования .from, то приведенные выше ответы являются отличными.