导入变量名称与常量变量名称在打字稿中导入库时的名称



我正在用打字稿编写柴摩卡测试

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-httpimport 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

相关内容

  • 没有找到相关文章

最新更新