Я был googling, но не могу найти информацию о том, что и как добавить в мой проект, чтобы позволить мне использовать методы ES6, такие как Array.from
__ EDIT: удаленное прототипное слово
Я был googling, но не могу найти информацию о том, что и как добавить в мой проект, чтобы позволить мне использовать методы ES6, такие как Array.from
__ EDIT: удаленное прототипное слово
Вы можете легко расширить существующие типы следующим образом:
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
}
На основании комментария я добавляю типизированную версию:
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.
Если вы уверены, что API существует на вашем движке во время выполнения, скомпилируйте с --lib es6
(или --lib dom,es6
если вы используете DOM API).
Посмотрите документацию Опции компилятора для более подробной информации.
Я надеюсь, что это не очень не по теме, но я нашел это при рефакторинге js в ts, и, если у вас есть подобный массив, похоже, он работает просто, передавая массив как в конструктор вместо использования from, устраняя необходимость в дополнительном методе.
например
// someScript.js
Array.from( arrayLikeThing );
становится
// someScript.ts
Array( arrayLikeThing );
Если есть другие причины для продолжения использования .from, то приведенные выше ответы являются отличными.