typescript компилирует типы в node_modules даже после их исключения

Пытаясь скомпилировать исходный код машинописного текста, я вижу, что компилятор также пытается скомпилировать типы в моей папке node_modules. Я использую typescript 2.6.1, и мой файл tsconfig выглядит следующим образом:

 {
  "compilerOptions": {
  "allowSyntheticDefaultImports":true,
  "outDir": "./dist",
  "mapRoot": "./dist",
  "module": "commonjs",
  "target": "es6",
  "sourceMap": true,
  "sourceRoot": "./source",
  "removeComments": false
},
"exclude": [
  "node_modules",
  "test"
],
  "include": [
  "source/*.ts"
]
}

Когда я запускаю следующую команду "tsc -w -p tsconfig.json", я получаю следующую ошибку

 node_modules/@types/es6-promise/index.d.ts(11,15): error TS2300: Duplicate identifier 'Promise'.

person Rahul Ganguly    schedule 15.11.2017    source источник


Ответы (2)


Прочитав этот документ, я получил ответ https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

в разделе @types, typeRoots и типы

Они упомянули

Укажите "types": [], чтобы отключить автоматическое включение пакетов @types.

Обновленный tsconfig.json выглядит следующим образом

{
  "compilerOptions": {
   "allowSyntheticDefaultImports":true,
   "outDir": "./dist",
   "mapRoot": "./dist",
   "module": "commonjs",
   "target": "es6",
   "sourceMap": true,
   "sourceRoot": "./source",
   "removeComments": false,
   "types": []
 },
 "exclude": [
   "node_modules",
   "test"
 ],
 "include": [
   "source/*.ts"
 ]
}
person Rahul Ganguly    schedule 15.11.2017

Почему?

Это также может произойти, если версии TypeScript не совпадают.

Например. Вы используете 2.9.x в своем глобальном кеше npm, и у вас есть TypeScript 3.5.x, установленный локально в вашем проекте node_modules.


Тест

Вы можете проверить это, запустив «npx tsc», но это будет работать только в том случае, если у вас есть TypeScript, сохраненный как зависимость, вы запустили «npm install» и у вас есть npm 5.2.x или выше.

В противном случае вы можете проверить свою локальную версию TypeScript с помощью «npm list typescript» и глобальную версию TypeScript с помощью «npm list typscript -g».


Решение

Если в случае подхода «npx tsc» он проходит, или, во втором случае, версии не совпадают, вам нужно только убедиться, что вы выравниваете свою локальную версию TypeScript с вашей глобальной версией TypeScript или наоборот.


Другие примечания:

«npx» запустит команду, используя пакет Node из локальной папки «node_modules» вашего проекта.

Ознакомьтесь с Диспетчером версий Node, если вы о нем не знаете, он отлично подходит для переключения между Node. версии на лету.

person Christopher Oliver    schedule 27.08.2019