Я пишу сервис nodeJS, который использует несколько модулей npm без @ types.
Сообщение об ошибке tsc говорит мне, что мне нужно добавить файл index.d.ts, но не говоритмне, где его поставить.Мой файл helper.spec.ts, который также импортирует те же модули, также не может обнаружить index.d.ts при запуске с jest
Я помещаю файл в корень вместе с tsconfig.json, но он не обнаруживаетЭто.Мои файлы и структура выглядят так:
Структура папок
node_modules
build
app.js
helper.js
another.js
spec
- helper.spec.ts
- another.spec.ts
src
- app.ts
- helper.ts
- another.ts
tsconfig.json
index.d.ts
jest.config.json
package.json
package-lock.json
tsconfig.json
{
"compilerOptions": {
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
"allowJs": true, /* Allow javascript files to be compiled. */
"outDir": "build", /* Redirect output structure to the directory. */
"strict": true, /* Enable all strict type-checking options. */
},
"include": [
"src/**/*.ts",
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
index.d.ts
declare module "module-one";
declare module "module-two";
declare module "module-three";
package.json
{
"dependencies": {
"module-one": "^2.0.4",
"module-two": "^1.3.3",
"module-three": "0.0.3",
"@types/lodash": "^4.14.129",
},
"devDependencies": {
"@types/jest": "^24.0.13",
"@types/node": "^9.6.0",
"cpx": "^1.5.0",
"jest": "^24.8.0",
"ts-jest": "^24.0.2",
"typescript": "^3.4.5"
},
"scripts": {
"start": "cd build && node app.js",
"test": "jest",
"build": "tsc",
"postinstall": "npm run-script build"
},
}
Где tsc и jest ожидают index.d.ts?
Некоторые статьи, в которых предлагается создать один index.d.tsдля каждого модуля, например, ./types/module-one/index.d.ts
, ./types/module-two/index.d.ts
, ./types/module-three/index.d.ts
, а затем отредактируйте tsconfig.json compilerOptions.typeRoots
, включив в него папку ./types
.
Но я хочу иметь только 1 index.d.ts свсе объявления.
Когда я редактирую tsconfig.json include
, чтобы включить файл index.d.ts
, я обнаружил, что tsc может скомпилировать файлы в моей папке src.Однако, когда я запускаю jest, он по-прежнему жалуется, что мой модуль index.d.ts отсутствует.
EDIT: Если я удалю свой tsconfig.json, тогда jest будет работать правильно без жалобнасчет отсутствующего модуля, но тогда я не могу tsc собрать мои файлы src.
Если я сохраню tsconfig.json, то tsc соберет мои файлы src, но jest будет жаловаться, что модуль один не определен.
РЕДАКТИРОВАТЬ 2: Я обнаружил, что если я установил [jest.config.ts].globals.ts-jest.diagnostics = false
, то ошибка исчезнет, и весь мой тест пройден!Но я не думаю, что это правильное решение?