Импорт global.d.ts без директив с тройным слешем
Контекст: попытка заставить mocha запустить тесты на файлах.ts в моем репозитории.
Проблема: когда я пытаюсь запустить mocha для моего файла входных тестов:
mocha --compilers ts:ts-node/register ./src/server/backend/specs/index.spec.ts
Я обнаружил, что ts-node
не увидит "include": ["./src/**/*"]
в моем tsconfig.json
файл (согласно документации ts-узла). Это означает, что мои тесты мокко не видят ./src/types/global.d.ts
, который включает в себя определение type Omit<T, K>
(среди прочего). Мои протестированные модули хотят использовать Omit
, что приводит к ошибке компилятора Cannot find name 'Omit'
,
Хорошо - думаю про себя - я просто импортирую global.d.ts
в index.spec.ts
используя директиву тройной косой черты. Так добавил /// <reference path="../../../types/global.d.ts" />
к вершине index.spec.ts
и получил эту жалобу от ts-lint: <reference> is not allowed, use imports (no-reference)
, (Для меня новость - директивы triple-slash теперь устарели, и мы советуем "использовать вместо них импорт в стиле ES6".)
Хорошо, так что я наивно, заменить директиву тройной косой черты с import "../../../types/global";
но потом TSC жалуется, конечно, что global.d.ts
не является модулем (что, конечно, это не так). Действительно, я использую global.d.ts
объявлять вещи, которые не являются модулями, поэтому я запутался, как вы должны импортировать это, и я не хочу экспортировать что-либо из global.d.ts
потому что я понимаю, что тогда он перестанет производить свою глобальную читабельность в контексте main-non-mocha.
Это прекрасно работает, когда я просто использую директиву triple-slash с правилом отсутствия ссылок, отключенным в ts-lint, но я бы хотел лучше понять, что здесь за последние шаблоны / мышления. Спасибо всем!
1 ответ
Google находит проблему по этому поводу, когда рекомендуется добавить файл глобальной декларации непосредственно в ваш проект в tsconfig.json
, В случае с ts-node вам придется использовать --files
вариант. Если вы не хотите этого делать, хорошей альтернативы не существует, поэтому я бы сказал, что нужно отменить предупреждение lint или отключить no-reference
Правило - это то, что нужно делать. Вы можете рассмотреть возможность открытия нового вопроса против tslint для дальнейшего обсуждения этого сценария.