在打字稿中导入库时导入variableName vs const variableName

时间:2018-09-25 11:38:09

标签: typescript mocha chai

我正在用打字稿写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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

假设您已安装@types/chai-http,则import 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类型声明。