Непонятное сообщение об ошибке "Дубликат идентификатора"

Почему я получаю это и еще много ошибок такого рода? Я добавляю ссылку на репозиторий, а также фрагменты кода ключа ниже. Я думаю, что у меня есть базовое недопонимание того, как работает зависимость и цепочка включения.

csvproc(master)> tsc
node_modules/typescript/bin/lib.core.d.ts(83,5): error TS2300: Duplicate identifier 'configurable'.
node_modules/typescript/bin/lib.core.d.ts(84,5): error TS2300: Duplicate identifier 'enumerable'.
node_modules/typescript/bin/lib.core.d.ts(85,5): error TS2300: Duplicate identifier 'value'.
node_modules/typescript/bin/lib.core.d.ts(86,5): error TS2300: Duplicate identifier 'writable'.

Весь код можно найти здесь.

Мой tsconfig.json:

{
    "compilerOptions": {
        "module": "commonjs",
        "noImplicitAny": false,
        "outDir": "built/",
        "sourceMap": true,
        "target": "es5"
    }
}

Мой цд.джон:

{
  "version": "v4",
  "repo": "borisyankov/DefinitelyTyped",
  "ref": "master",
  "path": "typings",
  "bundle": "typings/tsd.d.ts",
  "installed": {
    "node/node-0.10.d.ts": {
      "commit": "6387999eb899d0ba02d37dd8697647718caca230"
    },
    "should/should.d.ts": {
      "commit": "e1182d56ccb192379eade6055d9ba3fb6a0bacc4"
    }
  }
}

Мой цд.д.ц:

{
  "version": "v4",
  "repo": "borisyankov/DefinitelyTyped",
  "ref": "master",
  "path": "typings",
  "bundle": "typings/tsd.d.ts",
  "installed": {
    "node/node-0.10.d.ts": {
      "commit": "6387999eb899d0ba02d37dd8697647718caca230"
    },
    "should/should.d.ts": {
      "commit": "e1182d56ccb192379eade6055d9ba3fb6a0bacc4"
    }
  }
}

Ответ 1

Это из-за сочетания двух вещей:

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

  • Включение typescript в качестве зависимости npm: node_modules/typescript/ Это означает, что все typescript включаются... в любом случае в ваш проект неявно включен lib.d.ts (http://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html), и он конфликтует с тем, который поставляется с версией машинописи NPM.

Фикс

Либо перечислите files или include явно https://basarat.gitbooks.io/typescript/docs/project/files.html 🌹

Ответ 2

Обновление: Версия 1.0 из Типов изменила структуру вывода, и ниже ответ относится к версии до 1.0.

Если вы используете Typions и исключаете в tsconfig.json, вы можете столкнуться с проблемой повторяющихся типов и вам нужно что-то вроде следующего:

{
  "exclude": [
    "typings/browser.d.ts",
    "typings/browser",
    "node_modules"
  ]
}

Чтобы упростить интеграцию с TypeScript, создаются два файла - typings/main.d.ts и typings/browser.d.ts, которые ссылаются на все типовые данные, установленные в проекте, только один из которых может использоваться при время.

Итак, в зависимости от того, какую версию вам нужно, вы должны исключить (или включить) файлы "браузер" или "основной" тип, но не оба, так как это происходит из-за дубликатов.

Этот вопрос с типом обсуждает его больше.

Ответ 3

Если вы установили типизацию отдельно в папке с образцами

{
  "exclude": [
    "node_modules",
    "typings"
  ]
}

Ответ 4

Проблема была решена просто:

  • Удаление папки node_modules
  • Запуск npm install для получения всех пакетов с правильными версиями

В моем случае проблема возникла после изменения ветвей Git, где новая ветка использовала другой набор модулей node. В старой ветке использовался TypeScript v1.8, новый v2.0

Ответ 5

Я столкнулся с этой проблемой. Когда я запустил npm start, я получил кучу дубликатов идентификационных ошибок.

РЕШЕНИЕ:

В корневой папке проекта выполните:

rm -r typings
typings install
npm start

и все работает нормально.

Ответ 6

Вы также можете использовать опцию exclude в файле tsconfig.json следующим образом:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },
  "exclude": [
    "node_modules"
  ]
}

Ответ 7

В моем случае я получил ошибку как

node_modules/@types/es6-prom/index.d.ts(11,15): ошибка TS2300: дублирующий идентификатор "Promise".

И у меня был @types/es6-promise на моем package.json, но мой tsconfig уже был с target: "es6". Таким образом, я думаю, что был конфликт с Promise при компиляции.

Удаление @types/es6-promise из моего файла package.json решило проблему.

Ответ 8

Используя webpack, я столкнулся с той же ошибкой, на всякий случай, исключая файл .d.ts в tsconfig.json и node_modules, решил мою проблему:

"exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts",
    "typings/index.d.ts"
] 

Ответ 9

У меня возникла эта проблема, вызванная наличием неожиданной папки на диске (jspm_packages, которая больше не используется), которая не отслеживалась с помощью элемента управления источником (и скрыта от моей IDE). Это вызвало дублирование установки TypeScript, что вызвало проблемы.

Бит кромки, но оставляя ответ здесь на всякий случай, если кто-то ищет это решение.

Ответ 10

У меня была эта проблема, и оказалось, что у меня была вторая node_modules папка в моем проекте, которая не должна была быть там:-(

Ответ 11

У меня была эта ошибка вместе с другими, после того как я изменил tsconfig.json на цель: "es2015" и модуль: "es2015".

База (ускоренная система AngularJS2) использовала /// <reference path="../../typings/index.d.ts" /> в файле main.ts. Чтобы решить эту проблему, мне пришлось удалить эту строку.

Ответ 12

мы удалили папку lib из папки веб-сайта. это было создано предыдущей установкой титров. это стало дублировать. Когда это было удалено, это сработало!

Ответ 13

Это может быть из-за наличия и ввода и зависимости в вашей папке node. поэтому сначала проверьте, что у вас есть в вашей папке @types, и если у вас есть их в зависимостях, удалите дубликат. для меня это было core.js

Ответ 14

удалите этот @types/express-validator из файла package.json, затем запустите npm install

Прочитайте больше

Сообщение автора: Этот пакет устарел. Это определение типов заглушек для экспресс-валидатора (https://github.com/ctavan/express-validator). Экспресс-валидатор предоставляет свои собственные определения типов, поэтому вам не нужно устанавливать @types/express-validator!

Ответ 15

Выполните следующую команду, чтобы исправить эту проблему.

npm install @types/node --save-dev

Ответ 16

У меня возникла аналогичная проблема. Простое перемещение моего tsconfig.json из корня моего проекта до другого уровня помогло. В моем проекте я переместил tsconfig.json с корня до wwwroot.