Ответ 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.