WebStorm,ES5 / ES3中的异步函数或方法需要'Promise'构造函数

时间:2017-10-20 12:11:20

标签: typescript async-await webstorm

我尝试使用WebStorm IDE在typescript(ES6)中编写测试。例如:

// Imports...

describe('Message', () => {
    const server = express();
    server.use(bodyParser.json());

    const messageService = { findAll: () => ['test'] };

    beforeAll(async () => {
        const module = await Test.createTestingModule({
            modules: [MessageModule],
        })...
    });

    // Tests...
});

但WebStorm IDE在async () =>

显示以下错误
  

TS2705:ES5 / ES3中的异步功能或方法需要Promise   构造函数。确保您有Promise的声明   构造函数或在--lib选项中包含ES2015。

我的tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es6",
    "sourceMap": true,
    "allowJs": true,
    "outDir": "./dist"
  },
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "node_modules",
    "**/*.spec.ts"
  ]
}

我看了ts An async function or method in ES5/ES3 requires the 'Promise' constructor并尝试添加

"lib": [ "es2015" ]

然而它没有任何效果。任何想法有什么不对?

4 个答案:

答案 0 :(得分:14)

添加

"lib": [ "es2015" ]

tsconfig.json 应解决此问题。 但是,似乎您的规范文件未包含在 tsconfig.json 中(请检查"include":[]"exclude":[]值)。因此,Typescript服务必须为您的文件使用不同的 tsconfig.json (如果没有包含您的规范的 tsconfig.json 文件,则可能是默认文件) 要解决此问题,请确保在配置中指定用于规范文件处理的lib属性

答案 1 :(得分:7)

无需编辑项目源代码的解决方案

我在IntelliJ中遇到了这个问题,并通过更改我的IDE设置解决了该问题:

设置-> 语言和框架-> TypeScript

然后在“选项”字段中添加:

--lib es2015

enter image description here

答案 2 :(得分:0)

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "noImplicitAny": false,
    "removeComments": true,
    "noLib": false,
    "allowSyntheticDefaultImports": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es6",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./src",
    "lib": ["es2015"]
  },
  "include": [
    "src/**/*",
    "**/*.spec.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}

按照@lena的回答将"lib":["es2015"]添加到"compilerOptions",然后从**/*.spec.ts中删除"exclude":[]并将其添加到"include":[]中。

答案 3 :(得分:0)

在tsconfig.json中的“编译器选项”下添加“ lib”:[“ es2015”]

{
    "compilerOptions": {
      "lib": [ "es2015" ]
  }
}