TypeScript | Array.from | 错误TS2339:类型'ArrayConstructor'上不存在属性'from'

Kan*_*nia 22 typescript ecmascript-6

我在谷歌搜索,但无法找到信息,我应该如何添加到我的项目,以允许我使用ES6方法 Array.from

__编辑:删除原型单词

moh*_*azy 16

如果您确定在运行时引擎上存在API,请使用--lib es6(或者--lib dom,es6如果您使用DOM API)进行编译

有关详细信息,请参阅编译器选项文档


Nit*_*mer 9

您可以轻松扩展现有类型,如下所示:

interface Array {
    from(arrayLike: any, mapFn?, thisArg?): Array<any>;
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,这将把函数添加到数组实例而不是像你需要的静态函数.
但这可以这样做:

interface ArrayConstructor {
    from(arrayLike: any, mapFn?, thisArg?): Array<any>;
}
Run Code Online (Sandbox Code Playgroud)

然后你应该可以使用Array.from.

Playground尝试一下.


编辑

如果您需要填充实现(因为您打算运行的环境没有它),那么这是如何:

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

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

MDN中的polyfill代码.


第二次编辑

根据评论,我正在添加一个打字版本:

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>;
}
Run Code Online (Sandbox Code Playgroud)

它是如何在lib.es6.d.ts中定义的精确副本.

  • 这是否意味着没有向TS添加ES6方法定义的"标准"方法?我试图在这里找到它:http://definitelytyped.org/tsd/但没有任何运气......这是MS的下一个"好"的东西吗? (2认同)