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



我正在用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}

然后我开始在我的spec文件中使用它们,如下

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);
});
});

我得到这个错误这个模块只能通过打开'esModuleInterop'标志并引用其默认导出来引用ECMAScript导入/导出。。对于import * as assert from '../Helpers/assertions';,尽管esModuleInteroptsconfig.json中设置为真。

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

export = {assertSuccessResponseStatusCode}

:

export {assertSuccessResponseStatusCode}

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

当我将import语句更改为import assert from '../Helpers/assertions';

时,这是固定的。实际上,导致问题的是导出中的等号我导出了一个对象export = {assertSuccessResponseStatusCode}

如果更改为export{assertSuccessResponseStatusCode},则导入全部即可。

相关内容

  • 没有找到相关文章

最新更新