TypeScript - 在定位es2018时,rest操作员行为无效

时间:2018-02-28 21:59:33

标签: typescript

此代码适用于TypeScript Playground ...

class Foo {
    constructor(...args: any[]) {

    }

    static make(...args: any[]): Foo {
        return new Foo(...args);
    }
}

Example

...但它在Visual Studio中的TypeScript项目中不起作用。我在语句args

中收到return new Foo(...args);的以下错误消息
  

Type必须有一个返回的'Symbol.iterator'方法   迭代器。

这里有什么?

在本地计算机上运行TypeScript 2.7。将构建目标更改为 es2018

时会出现此问题

1 个答案:

答案 0 :(得分:4)

这似乎是编译器中的一个错误,es2018的默认库不正确。在撰写本文时,从编译器代码:

export function getDefaultLibFileName(options: CompilerOptions): string {
    switch (options.target) {
        case ScriptTarget.ESNext:
            return "lib.esnext.full.d.ts";
        case ScriptTarget.ES2017:
            return "lib.es2017.full.d.ts";
        case ScriptTarget.ES2016:
            return "lib.es2016.full.d.ts";
        case ScriptTarget.ES2015:
            return "lib.es6.d.ts";  // We don't use lib.es2015.full.d.ts due to breaking change.
        default:
            return "lib.d.ts";
    }
}

缺少es2018的选项。您可以手动指定适当的库:

{
    "compilerOptions": {
        "target": "es2018",
        "lib": [
            "es2018",
            "dom"
        ]
    }
}