Cypress-тесты не распознают типы пакетов node_modules

У меня проблемы с тестами Cypress для моего (Typescript) приложения, распознающего типы для установленного мной пакета. Вот моя структура каталогов верхнего уровня:

cypress
node_modules
src

Мой cypress/tsconfig.json файл выглядит так:

{
  "compilerOptions": {
    "strict": true,
    "baseUrl": "../node_modules",
    "paths": {
      "~/*": ["../src/*"]
    },
    "jsx": "react",
    "target": "es6",
    "lib": ["es6", "dom", "es2017.string"],
    "types": ["cypress"]
  },
  "include": ["**/*.ts"]
}

В одном из моих файлов спецификаций у меня есть следующий импорт:

import * as faker from 'faker';
import { DeepPartial } from 'utility-types';

Типы для faker определены в DefinentyTypes (@types/faker), тогда как типы для utility-types включены в этот пакет как *.d.ts файлы. При импорте faker проблем нет, но при импорте utility-types возникает ошибка Не удается найти модуль 'служебные-типы' или соответствующие объявления типа..

Я пробовал явно включить файлы *.d.ts из каталога node_modules в файл tsconfig.json в свойствах compilerOptions.types, compilerOptions.typeRoots и include, но безрезультатно.

Я также создал фальшивые (?) Типы вроде следующего, чтобы он компилировался:

declare module 'utility-types' {
  export type DeepPartial<T> = {};
}

Это позволяет приложению компилировать И во время выполнения пакеты разрешаются, поэтому, похоже, проблема заключается в поиске типов, а не самих модулей.

Почему Cypress не находит типы для этих пакетов?


person im1dermike    schedule 04.09.2020    source источник
comment
Попробуйте добавить следующее в свой .tsconfig: "include": [ "node_modules/cypress/types/index.d.ts", "node_modules/cypress/types/blob-util.d.ts", "node_modules/cypress/types/minimatch.d.ts", "node_modules/cypress/types/bluebird.d.ts", "cypress/**/*.ts" ]   -  person Raghav Kukreti    schedule 04.09.2020
comment
Для справки я просмотрел образец репозитория с рабочей средой TS: github.com/cypress-io/cypress-example-recipes/blob/master/   -  person Raghav Kukreti    schedule 04.09.2020
comment
@RaghavKukreti Я должен был упомянуть, что пробовал свойство include tsconfig в дополнение к types и typeRoots. Это не работает.   -  person im1dermike    schedule 04.09.2020


Ответы (1)


Вы можете попробовать установить moduleResolution на node

https://www.typescriptlang.org/docs/handbook/module-resolution.html#module-resolution-strategies

Я попытался импортировать utility-types с такой конфигурацией: импорт работает, и тестовый запуск выполняется правильно.

{
    "compilerOptions": {
      "strict": true,
      "baseUrl": "../node_modules",
      "paths": {
        "~/*": ["../src/*"]
      },
      "jsx": "react",
      "target": "es6",
      "lib": ["es6", "dom", "es2017.string"],
      "types": ["cypress"],
      "moduleResolution": "node"
    },
    "include": ["**/*.ts"]
  }
person dna    schedule 16.09.2020