我正在用打字稿编写柴摩卡测试
import * as chai from 'chai'
const chaiHttp = require('chai-http')
chai.use(chaiHttp)
...
await chai.request('http://localhost:' + config.expressPort)
上面的代码抛出一个错误Property 'request' does not exist on type 'ChaiStatic'
但是如果我像这样改变 chai-http 的导入方式
import chaiHttp = require('chai-http')
代码成功运行。
我从未导入过这样的库。我想知道这里到底发生了什么。
PS:这是我的测试脚本:mocha --require ts-node/register test/test.spec.ts -t 5000 --exit
注意:安装 @types/chai-http 后,然后添加import * as chaiHttp from 'chai-http'
代码,然后我得到错误resolved into a non-module entity and cannot be imported from this construct
假设你已经安装了@types/chai-http
,import chaiHttp = require('chai-http')
是TypeScript识别的一种特殊语法,用于导入使用导出赋值的CommonJS模块。 作为导入,它会导致 TypeScript 加载chai-http
类型声明,其中包括使chai.request
工作的扩充。 在const chaiHttp = require('chai-http')
中,require('chai-http')
被视为一个普通的函数调用,不会导致 TypeScript 加载chai-http
类型声明。
我在本地尝试了代码,但使用 const 和 import 语句都遇到了相同的错误。
Property 'request' does not exist on type 'ChaiStatic'.
但是,生成的 js 应该是相同的。查看js文件,它生成为
var chaiHttp = require("chai-http");
所以问题发生在从 TS 到 JS 的编译时。为了解决这个问题,我安装了@types/chai-http
npm install @types/chai-http --save-dev