Я пишу тесты чай-мокко в машинописном тексте

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

0
suku 25 Сен 2018 в 14:38

2 ответа

Лучший ответ

Предполагая, что у вас установлен @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.

0
Matt McCutchen 25 Сен 2018 в 14:53

Я попробовал код локально и получил ту же ошибку при использовании оператора 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
0
deerawan 25 Сен 2018 в 14:40