我尝试使用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" ]
然而它没有任何效果。任何想法有什么不对?
答案 0 :(得分:14)
添加
"lib": [ "es2015" ]
到 tsconfig.json 应解决此问题。
但是,似乎您的规范文件未包含在 tsconfig.json 中(请检查"include":[]
和"exclude":[]
值)。因此,Typescript服务必须为您的文件使用不同的 tsconfig.json (如果没有包含您的规范的 tsconfig.json 文件,则可能是默认文件)
要解决此问题,请确保在配置中指定用于规范文件处理的lib
属性
答案 1 :(得分:7)
我在IntelliJ中遇到了这个问题,并通过更改我的IDE设置解决了该问题:
设置-> 语言和框架-> TypeScript
然后在“选项”字段中添加:
--lib es2015
答案 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" ]
}
}