Невозможно найти файл определения типа для «jest», хотя jest установлен.
АКТУАЛЬНОЕ РЕШЕНИЕ:
Если вы столкнулись с той же проблемой и (как и я) не удовлетворены «быстрыми и грязными» решениями, подобными тем, что указаны в ответе/комментариях, вам следует воссоздать репозиторий. Это больше работы, чтобы иметь меньше проблем в будущем. В моем случае репо было нарушено из-за плохой миграции. Такие вещи случаются иногда, и я слышал, что некоторые команды повторно размещают свои проекты каждые несколько месяцев или около того.
Вопрос:
У меня есть репозиторий nx, внутри которого есть приложение NextJs, и в его tsconfig.json есть эта ошибка:
Cannot find type definition file for 'jest'.
The file is in the program because:
Entry point of type library 'jest' specified in compilerOptions
Насколько я помню, раньше проблема была просто предупреждением, но после миграции репозитория nx с 16.3.2 на 16.5.2 теперь возникает ошибка сборки.
У меня они установлены как devDeps:
"@nx/jest": "16.5.2",
"@types/jest": "^29.4.4",
"babel-jest": "29.4.3",
"jest": "29.4.3",
"jest-environment-jsdom": "29.4.3",
"ts-jest": "29.1.0",
tsconfig.json:
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"jsx": "preserve",
"allowJs": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"types": [
"node",
"jest"
],
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"resolveJsonModule": true,
"isolatedModules": true,
"typeRoots": [
"./types/next-auth.d.ts",
],
"incremental": true,
"paths": {
"@/*": ["./apps/<app>/*"],
}
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.jsx",
"next-env.d.ts"
],
"exclude": [
"node_modules",
"jest.config.ts"
]
}
Я пытался:
- удаление папки node_modules и .next, переустановка модулей после закрытия VSCode и уничтожение всех скрытых процессов, которые могут еще работать
- 2 часа гугления
Есть идеи, что не так и как это исправить?
1 ответ
Некоторые пакеты могут не включать собственные определения типов. Эта ошибка возникает потому, что:
Вы используете машинописный текст, и компилятор не может найти файл определения типа в папке пакета вnode_modules
или любой из указанных вами корневых типов.
В Jest есть определения типов, предоставляемые . Вы можете установить их, выполнив одну из следующих команд:
Использование пряжи
yarn -D add @types/jest
Использование НПМ
npm install @types/jest --save-dev
Как вы можете видеть, обе приведенные выше команды сохраняют эту зависимость как зависимость разработки, а это означает, что код не будет включен в ваш производственный пакет. Это оптимально для машинописных типов, поскольку ваш код в любом случае будет скомпилирован в JS.
Что делать, если вы не можете найти типы для пакета?
Если вы встретите пакеты, которые не содержат собственных определений типов и для них не было создано определение в репозитории DefinitelyTypedDefinitelyTyped , вы всегда можете определить свои собственные типы для пакета внутри репозитория DefiniteTyped..d.ts
файл такой:
declare module "my-module" {
// ... type the contents of the package, like functions etc.
}
Если вы создаете пользовательские определения типов для пакета, который еще не типизирован, рассмотрите возможность внести свой вклад в репозиторий DefinitelyTyped, чтобы другие тоже могли воспользоваться вашими типами.