Импорт 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 для дальнейшего обсуждения этого сценария.

Другие вопросы по тегам