TypeScript - [Последующие объявления свойств должны иметь одно и то же время] - несколько ссылок на определения одного и того же типа

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

Проще говоря, мой проект - это приложение ASP.NET MVC React, которое использует NPM, TypeScript и Webpack для управления зависимостями JavaScript. Проблема, с которой я столкнулся, заключается в том, что, хотя мой проект может успешно компилироваться, у меня есть более 180 errors, которые выглядят следующим образом.

TS2717    (TS) Subsequent property declarations must have the same type. 
Property 'webview' must be of type
'DetailedHTMLProps<WebViewHTMLAttributes<HTMLWebViewElement>,
HTMLWebViewElement>', but here has type
'DetailedHTMLProps<WebViewHTMLAttributes<HTMLWebViewElement>,
HTMLWebViewElement>'.

Вот изображение консоли ошибок:  введите описание изображения здесь

Теперь, если я посмотрю поближе, щелкнув тип и нажав «Перейти к определению», я вижу, что в моем проекте явно есть две ссылки, определенные для того же типа, что и здесь:

введите описание изображения здесь

Проблема в том, что оба эти файла являются требованиями для моего проекта tsconfig.json, потому что без них он не компилируется.

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

{
  "compilerOptions": {    
    "module": "commonjs",    
    "moduleResolution": "node",
    "target": "es5",
    "sourceMap": true,
    "lib": [ "es5", "es2017", "dom"]
    "removeComments": true,
    "typeRoots": [
      "/node_modules/@types",
      "/Types/"
    ]

  },
  "compileOnSave": false,
  "exclude": [
    "/node_modules/",
    "/bin",
    "/obj"
  ]
}

а мой файл package.json выглядит так:

{
  "name": "fungalai",
  "version": "1.0.0",
  "dependencies": {
    "react": "16.4.2",
    "react-dom": "16.4.2"
  },
  "devDependencies": {
    "@types/flux": "3.1.7",
    "axios": "^0.18.0",
    "deep-diff": "^1.0.1",
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.4",
    "babel-polyfill": "^6.26.0",
    "babel-preset-es2015": "6.24.1",
    "babel-preset-react": "6.24.1",
    "babel-preset-stage-0": "^6.24.1",
    "create-react-class": "^15.6.3",
    "expose-loader": "^0.7.5",
    "jszip": "^3.1.5",
    "flux": "3.1.3",
    "ts-loader": "^4.3.0",
    "typescript": "3.0.1",
    "uglifyjs-webpack-plugin": "^1.2.5",
    "webpack": "^4.8.3",
    "webpack-cli": "^2.1.4"
  }
}

Теперь я подозреваю, что эта проблема как-то связана со строкой в ​​моем файле tsconfig.json "lib": [ "es5", "es2017", "dom"], но если я удалю любую из этих ссылок, мой проект не будет компилироваться, потому что явно некоторые из моих типов определены в этих ссылках на библиотеки.

Может ли кто-нибудь помочь мне в правильном направлении решения этой проблемы и правильно ссылаться на DOM вместе с React в ASP.NET TypeScript?

РЕДАКТИРОВАТЬ: Я также попытался изменить свой файл tsconfig.json, чтобы удалить ссылки «lib» (при условии, что я могу использовать Polyfill) на «lib»: []. Однако проблема все еще сохраняется.


person Maxim Gershkovich    schedule 31.08.2018    source источник
comment
Каковы полные пути к global.d.ts файлам, которые вы нашли в определении «Перейти к»? Предполагая, что это типизации React, похоже, что у вас могут быть установлены две несовместимые копии типов React.   -  person Matt McCutchen    schedule 31.08.2018
comment
Привет, Мэтт, спасибо за ответ. Полный путь: C: \ blah \ blah \ myproject \ node_modules \ @types \ react и C: \ Users \ Max \ AppData \ Local \ Microsoft \ TypeScript \ 3.0 \ node_modules \ @types \ react. Теперь я вижу, что проблема заключается в том, что моя папка node_modules загружает типы реакции. Если я удалю папку из node_modules и перезапускаю, похоже, это решит, но проблема в том, что я не вижу нигде, где я добавил ссылку для реагирования.   -  person Maxim Gershkovich    schedule 02.09.2018


Ответы (4)


Я считаю, что благодаря приведенным выше отзывам я нашел решение своей проблемы.

  1. Запустите npm uninstall response -g, чтобы удалить пакет реакции из глобального кеша.
  2. Создайте в вашем package.json файле ссылку на пакет @types/react.

    "devDependencies": {"@ types / react": "16.4.13"}

Мой последний файл package.json выглядел так:

{
  "name": "fungalai",
  "version": "1.0.0",
  "dependencies": {
    "react": "16.4.2",
    "react-dom": "16.4.2"
  },
  "devDependencies": {
    "@types/flux": "3.1.7",
    "@types/react": "16.4.13",
    "axios": "^0.18.0",
    "deep-diff": "^1.0.1",
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.4",
    "babel-polyfill": "^6.26.0",
    "babel-preset-es2015": "6.24.1",
    "babel-preset-react": "6.24.1",
    "babel-preset-stage-0": "^6.24.1",
    "create-react-class": "^15.6.3",
    "expose-loader": "^0.7.5",
    "jszip": "^3.1.5",
    "flux": "3.1.3",
    "ts-loader": "^4.3.0",
    "typescript": "3.0.1",
    "uglifyjs-webpack-plugin": "^1.2.5",
    "webpack": "^4.8.3",
    "webpack-cli": "^2.1.4"
  }
}

и tsconfig.json вот так:

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "target": "es5",
    "sourceMap": true,
    "jsx": "react",
    "lib": [ "es6", "dom" ], 
    "removeComments": true,
    "typeRoots": [
      "/node_modules/@types",
      "/Types/"
    ]
  },
  "compileOnSave": false,
  "exclude": [
    "/node_modules/",
    "/bin",
    "/obj"
  ]
}

Кажется, это устранило ошибки.

person Maxim Gershkovich    schedule 02.09.2018
comment
Если кто-то хочет предоставить более подробный ответ, был бы признателен за пояснение, почему я получаю @types/react ссылку на пакет в моей папке node_modules, хотя она не была объявлена ​​в package.json. Я использую Visual Studio 2017 и задаюсь вопросом, может ли среда IDE делать что-то неожиданное, а не npm. - person Maxim Gershkovich; 02.09.2018

Я обнаружил следующую проблему с github, которая, я уверен, определяет основную причину проблем, с которыми вы столкнулись: https://github.com/DefinentyTyped/DefinitiTyped/issues/25145

Таким образом, вы получите @ types / response в версии 16.3.9 и @ types / response-dom в версии 16.0.5, потому что вы явно просили об этом. Однако @ types / react-dom перечисляет зависимость от @ types / react следующим образом: "@types/react": "*"

[this] интерпретируется как последняя версия @ types / react, поэтому устанавливает дополнительную версию пакета.

Таким образом, у вас будут одновременно использоваться версии v16.3.9 и v16.3.12 пакета типов, что вызывает ошибку.

Я знаю два способа исправить это:

  1. Обновите пакет @ types / react до последней версии в вашем package.json.
  2. Добавьте раздел разрешений в свой package.json, чтобы Yarn разрешил зависимость по-другому.
person Zze    schedule 14.10.2020

Эта ошибка возникает, когда у вас есть зависимость и подмодуль с такой же зависимостью в другой версии. Правильный способ исправить это - включить раздел разрешений в ваш package.json. В следующем примере объясняется, как вам решать: package.json

{
  "name": "project",
  "version": "1.0.0",
  "dependencies": {
    "left-pad": "1.0.0",
    "c": "file:../c-1",
    "d2": "file:../d2-1"
  },
  "resolutions": {
    "d2/left-pad": "1.1.1",
    "c/**/left-pad": "^1.1.2"
  }
}

Ссылка на документацию: https://classic.yarnpkg.com/en/docs/selective-version-resolutions/

person alvaropaco    schedule 25.03.2021

Предоставление "skipLibCheck": false параметрам компилятора tsconfig решило проблему в моем случае

person Elias    schedule 22.06.2021