импортировать variableName против const variableName при импорте библиотеки в машинописном тексте - PullRequest
0 голосов
/ 25 сентября 2018

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

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 isустановлен и затем import * as chaiHttp from 'chai-http' код добавлен, тогда я получаю ошибку resolved into a non-module entity and cannot be imported from this construct

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

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

Я попробовал код локально и получил ту же ошибку при использовании оператора 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
...