该模块只能通过打开“esModuleInterop”标志并引用其默认导出来通过 ECMAScript 导入/导出来引用

Mon*_*1ma 19 mocha.js chai typescript

我正在使用 TypeScript 创建 API 测试框架,但我对它还很陌生。

我创建了这个帮助文件assertions.ts

import * as chai from 'chai';

interface response {
    status: number
    body: object
}

const assertResponseStatusCode =
    (response:response, statusCode:number) =>
        chai.expect(response.status).to.deep.equals(statusCode);

const assertSuccessResponseStatusCode = (response:response) =>
    assertResponseStatusCode(response, 201)

export = {assertSuccessResponseStatusCode}
Run Code Online (Sandbox Code Playgroud)

然后我开始在我的规范文件中使用它们,如下所示

import * as auth from '../Helpers/auth';
import * as assert from '../Helpers/assertions';
import { user } from '../Samples/user';

describe('login', () => {
    it('should return access token with valid credentials', async() => {
        const response = await auth.login(user);
        console.log(response.body);
        assert.assertSuccessResponseStatusCode(response);
    });
});
Run Code Online (Sandbox Code Playgroud)

我收到此错误此模块只能通过打开“esModuleInterop”标志并引用其默认导出来使用 ECMAScript 导入/导出来引用。。对于这一行,import * as assert from '../Helpers/assertions';尽管esModuleInterop在 中设置为 true tsconfig.json

Rei*_*ica 26

我也刚刚遇到了这个问题,另一个答案给出了一个解决方案,但我认为在这种情况下更好的解决方案是改变:

export = {assertSuccessResponseStatusCode}
Run Code Online (Sandbox Code Playgroud)

到:

export {assertSuccessResponseStatusCode}
Run Code Online (Sandbox Code Playgroud)

第一种方法是 TypeScript 与 CommonJS 模块的互操作,但只能导入import assertions from './assertions'. 第二个是 ESM 导出,可以作为 或import { assertSuccessResponseStatusCode } from './assertions' 导入 import * as assertions from './assertions'。它还允许您将默认导出与其他导出一起使用。


Mon*_*1ma 7

当我将导入语句更改为时,它对我来说是固定的import assert from '../Helpers/assertions';

实际上,导致问题的原因是我导出一个对象的导出中的等号export = {assertSuccessResponseStatusCode}

如果改为export{assertSuccessResponseStatusCode},则 import all 就可以了。