Декларация Typescript должна иметь одну и ту же проблему с переменными в разных зависимостях - PullRequest
0 голосов
/ 10 июля 2019

У меня есть проект, который реализован с помощью .NET Core и ReactJS. Недавно я обновил некоторые пакеты из-за добавления нового компонента в файл .tsx. Чтобы добавить Container компонент в @ material-ui / core, его версия была обновлена ​​с "@ material-ui / core": "^ 3.0.3" до "@ material-ui / core": "^ 4.1.3" . Неизвестный тип в машинописи был предоставлен после 3.0.0 версии, после чего я изменил версию машинописи с "машинописи ":" ^ 2.8.1 " до " машинопись ":" ^ 3.0.0 ". До этих изменений не было проблем с отображением страниц. Произошла ошибка при отображении страницы.

Я попытался снова изменить версии, но они не совместимы друг с другом.

Мой файл package.json добавлен позади.

{
  "name": "bookstore",
  "private": true,
  "version": "0.1.0",
  "scripts": {
    "start": "ASPNETCORE_ENVIRONMENT=Development dotnet run",
    "startlive": "ASPNETCORE_ENVIRONMENT=Development dotnet watch run",
    "startWindows": "dotnet run environment=development",
    "startliveWindows": "dotnet watch run environment=development"
  },
  "devDependencies": {
    "@types/history": "^4.6.2",
    "@types/react": "^16.4.13",
    "@types/react-autosuggest": "^9.3.6",
    "@types/react-dom": "^16.0.7",
    "@types/react-hot-loader": "^3.0.6",
    "@types/react-router": "^4.0.29",
    "@types/react-router-dom": "^4.3.0",
    "@types/webpack-env": "^1.13.5",
    "aspnet-webpack": "^2.0.1",
    "aspnet-webpack-react": "^3.0.0",
    "awesome-typescript-loader": "^3.2.1",
    "axios": "^0.18.0",
    "css-loader": "^0.28.4",
    "event-source-polyfill": "^0.0.9",
    "extract-text-webpack-plugin": "^2.1.2",
    "file-loader": "^0.11.2",
    "isomorphic-fetch": "^2.2.1",
    "json-loader": "^0.5.4",
    "prop-types": "^15.6.2",
    "react": "^16.4.1",
    "react-autosuggest": "^9.4.2",
    "react-dom": "^16.4.1",
    "react-hot-loader": "^3.0.0",
    "react-redux": "^5.0.7",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.2",
    "redux": "^4.0.1",
    "style-loader": "^0.18.2",
    "typescript": "^3.0.0",
    "url-loader": "^0.5.9",
    "webpack": "^2.3.0",
    "webpack-hot-middleware": "^2.21.2"
  },
  "dependencies": {
    "@material-ui/core": "^4.1.3",
    "@material-ui/icons": "^3.0.1",
    "classnames": "^2.2.6"
  }
}

Ошибка, которую выкинула программа, записана позади.

[at-loader] ./node_modules/typescript/lib/lib.dom.d.ts:8889:13 TS2403: Последующие объявления переменных должны иметь одинаковый тип. Переменная 'History' должна иметь тип 'typeof import ("C: / Users / Beko / Source / Repos / BookStore / Client / node_modules / @ types / history / index") ", но здесь имеет тип" {new (): импорт ( "C: / Users / Beko / Source / Repos / BookStore / Клиент / node_modules / @ типы / история / индекс"); прототип: импорт ("C: / Users / Beko / Source / Repos / BookStore / Client / node_modules / @ types / history / index"); }».

РЕДАКТИРОВАТЬ 10.07.2019 / 01.41 утра

Мой tsconfig.json имеет параметр "types", как вы видите ниже.

{
  "compilerOptions": {
    "baseUrl": ".",
    "module": "es2015",
    "moduleResolution": "node",
    "target": "es5",
    "lib": [
      "es6",
      "dom",
      "es5",
      "es2015.iterable",
      "es2015.collection",
      "es2015.symbol.wellknown",
      "es2015.promise",
      "es2015.symbol",
      "es2015.generator",
      "dom.iterable",
    ],
    "jsx": "react",
    "sourceMap": true,
    "skipDefaultLibCheck": false,
    "strict": false,
    "allowUnusedLabels": true,
    "types": [
      "webpack-env"
    ]
  },
  "exclude": [
    "typings",
    "bin",
    "node_modules"
  ]
}

1 Ответ

0 голосов
/ 10 июля 2019

Похоже, @types/history объявляет глобальный History, который отличается от встроенного TypeScript в lib.dom.d.ts.

Если вы не используете пакет history (Iне видеть это в ваших зависимостях), самое простое решение - удалить зависимость от @types/history.

Если вы используете history через неявную зависимость, вы можете предотвратитьего типы автоматически добавляются в глобальное пространство имен с помощью свойства types в tsconfig.json.Это свойство должно содержать только пакеты типов, которые должны быть доступны глобально, например webpack-env (глобальные переменные, связанные с Webpack).Так что начните с этого и добавьте больше, если вы получаете ошибки компиляции об отсутствующих типах.

{
  "compilerOptions": {
    // add more entries to this array as needed
    "types": ["webpack-env"]
  }
}
...