Дубликат идентификатора "LibraryManagedAttributes"

У меня такая же проблема, как в:

React typescript (2312,14): Дублирующий идентификатор 'LibraryManagedAttributes'

а также

Ошибка TypeScript: повторяющийся идентификатор 'LibraryManagedAttributes'

Но я просто не могу найти решение.

Я уже обновлен до последней версии node/npm/yarn/typescript. Также попытался понизить. Ничто не помогает.

yarn build --verbose
yarn run v1.9.4
$ react-scripts-ts build --verbose
Creating an optimized production build...
Starting type checking and linting service...
Using 1 worker with 2048MB memory limit
ts-loader: Using [email protected] and C:\dev\project\frontend\tsconfig.prod.json
Warning: member-ordering - Bad member kind: public-before-private
Failed to compile.

C:/dev/project/frontend/node_modules/@types/prop-types/node_modules/@types/react/index.d.ts
(2312,14): Duplicate identifier 'LibraryManagedAttributes'.


error Command failed with exit code 1.

--verbose как-то не дает мне больше информации.

Как я вижу, LibraryManagedAttributes определен в:

  • node_modules/@types/react/index.d.ts
  • node_modules/@types/prop-types/node_modules/@types/react/index.d.ts
  • node_modules/@types/react-overlays/node_modules/@types/react/index.d.ts
  • ...

Откуда это? Как я могу избежать этого?

Я хочу узнать, откуда эта ошибка, чтобы я мог сообщить об этом правильному объекту, но я не знаю, с чего начать.

Что еще я могу попробовать?

Ответ 1

Это похоже на то, что Yarn разрешает несколько версий пакета; @types/react в этом конкретном случае. Пряжа решает @types/react ваш пакет.json и как зависимость от @types/react-dom.

Возьмите следующий фрагмент из моего пакета. Json:

"devDependencies": {
  "@types/react": "^15.0.16",
  "@types/react-dom": "^0.14.23"
  ...
}

Пряжа, созданная после yarn install содержит нечто похожее на это:

"@types/[email protected]^0.14.23":
  version "0.14.23"
  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-0.14.23.tgz#cecfcfad754b4c2765fe5d29b81b301889ad6c2e"
  dependencies:
    "@types/react" "*"

"@types/[email protected]*":
  version "16.4.14"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-16.4.14.tgz#47c604c8e46ed674bbdf4aabf82b34b9041c6a04"
  dependencies:
    "@types/prop-types" "*"
    csstype "^2.2.0"

"@types/[email protected]^15.0.16":
  version "15.6.19"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-15.6.19.tgz#a5de18afe65b0f29767328836b48c498a5d3a91b"

Обратите внимание, что @types/react-dom зависит от любой версии @types/react указанной в "*". Пряжа разрешает две версии @types/react "16.4.14" @types/react: "16.4.14" и "15.6.19". Это приводит к конфликтам типа, о которых вы говорили.

Решение состоит в том, чтобы добавить поле разрешений к вашему package.json, чтобы сообщить Пряжам разрешить определенную версию @types/react. Возьмем следующий образец:

"resolutions": {
  "@types/react": "^15.0.16"
}

Запустите yarn install. Обратите внимание на изменение файла yarn.lock:

"@types/[email protected]^0.14.23":
  version "0.14.23"
  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-0.14.23.tgz#cecfcfad754b4c2765fe5d29b81b301889ad6c2e"
  dependencies:
    "@types/react" "*"

"@types/[email protected]*", "@types/[email protected]^15.0.16":
  version "15.6.19"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-15.6.19.tgz#a5de18afe65b0f29767328836b48c498a5d3a91b"

Пряжа теперь разрешает ту же версию "15.6.19" для обеих зависимостей "@types/[email protected]^15.0.16" "@types/[email protected]*" и "@types/[email protected]^15.0.16".

Я хотел бы знать, почему это необходимо. Я бы ожидал, что Пряжа поймет, что может разрешить зависимость "@types/react" "*" с "@types/[email protected]^15.0.16" вместо того, чтобы разрешать ее с последней версией @types/react.

Ответ 2

Это, кажется, проблема с машинописными текстами.

Моим текущим обходным "skipLibCheck": true является добавление "skipLibCheck": true для tsconfig.json.

Я хочу подчеркнуть, что это всего лишь обходное решение, а не проблема в проблеме.

Ответ 3

Самый простой способ исправить это для меня - удалить каталог node_modules и файлы с файлами narn.lock/package-lock, а затем выполнить установку пряжи, чтобы переустановить все узловые модули.

Ответ 4

У меня та же проблема после yarn upgrade @types/react-router-dom. git diff показывает несколько версий разрешения @types/react. В моем случае, yarn upgrade @types/react эту проблему. Удаление yarn.lock должно помочь.

Кажется, что новая (без yarn.lock) установка разрешит пакеты в согласованное состояние, но частичное обновление не разрешит зависимости глобально. Таким образом, ручная настройка может быть необходима для обновления всех задействованных пакетов.

Ответ 5

Я получил ту же ошибку. Мне удалось это исправить, удалив мой @types/реагировать и затем снова установив их.

yarn remove @types/react
yarn add @types/react

Ответ 6

Для меня у меня были типы реакций, дублированные в react-redux, react и react-intl, когда я обновил react-intl. Наименее навязчивое исправление, которое до сих пор работало для меня, это запустить это:

npx yarn-deduplicate --packages @types/react yarn.lock

Если полученная разница в файле блокировки выглядит правильно, продолжайте и удалите node_modules, затем yarn, чтобы получить свежие пакеты из дедуплицированного файла блокировки.

Ответ 7

В моем случае я получил сообщение об ошибке, указывающее, что "LibraryManagedAttributes" объявлен в 2 разных местах. Следуя по пути, я понял, что установленный модуль также имеет файл package.json, который также добавляет "@types/реагировать" как dep, и его версия не совпадает с версией в корневом файле package.json. Я поменял эти две версии на одну и ту же, и проблема была решена.

Ответ 8

Lo resolví usando соло пряжа удалить @типы/реагировать

Ответ 9

Что касается вопроса, то запуск npm list @types/react из каталога вашего package.json должен перечислить дубликаты определений типов, найденных в вашем проекте.