Невозможно найти файл определения типа для «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, чтобы другие тоже могли воспользоваться вашими типами.

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