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

import variableName vs const variableName while importing library in typescript

我正在用 typescript 编写 chai-mocha 测试

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')

代码运行成功。

我从来没有像这样导入过任何库。我想知道这里到底发生了什么。

P.S.: 这是我的测试脚本: 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

我在本地尝试了代码,使用 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

假设您安装了 @types/chai-httpimport chaiHttp = require('chai-http')a special syntax recognized by TypeScript 导入使用导出分配的 CommonJS 模块。作为导入,它会导致 TypeScript 加载 chai-http 类型声明,其中包括使 chai.request 工作的扩充。在 const chaiHttp = require('chai-http') 中,require('chai-http') 被视为普通函数调用,不会导致 TypeScript 加载 chai-http 类型声明。