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

175

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

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"
    }
  }
}
  • 0
    Ваш tsd.d.ts вероятно, выглядит как пара ссылочных тегов, а не как файл JSON.
  • 1
    Зачем вам нужен typings.json И tsd.d.ts ?
Показать ещё 1 комментарий
Теги:

15 ответов

97
Лучший ответ

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

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

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

исправлять

Либо список files или include в include явно https://basarat.gitbooks.io/typescript/docs/project/files.html

  • 4
    Или вместо этого установить машинописный текст глобально?
  • 1
    Да, я не знаю, почему это там локально :) Я предположил, что, возможно, ему нужно немного API от него (в ретроспективе ... вряд ли)
Показать ещё 6 комментариев
65

Обновление: Версия 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, которые ссылаются на все типовые данные, установленные в проекте, только один из которых может использоваться при время.

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

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

  • 0
    Удивительный человек, это решает проблему с ошибкой дублирующегося идентификатора от включения Typings в ваш проект :)
  • 0
    это прекрасно работает
Показать ещё 5 комментариев
21

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

{
  "exclude": [
    "node_modules",
    "typings"
  ]
}
  • 2
    ах да - добавление опечаток к моему исключению исправило мою ошибку.
  • 1
    У меня также была копия в / obj, что приводило к ошибкам из "Typescript Virtual Projects". Добавление «obj» для исключения исправленных тем.
Показать ещё 1 комментарий
15

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

РЕШЕНИЕ:

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

rm -r typings
typings install
npm start

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

  • 0
    Для меня я перешел от использования es6-shim к использованию core-js для своих полифиллов, и это решение работало бы. Менее typings prune подход заключается в использовании typings prune .
  • 0
    спасибо приятель, работал на меня.
Показать ещё 1 комментарий
14

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

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

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

  • 2
    Это сделало это для меня!
  • 2
    Ага ! это сработало ...
Показать ещё 3 комментария
11

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

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },
  "exclude": [
    "node_modules"
  ]
}
  • 3
    У меня точно такая же проблема. Это исправление не работает для меня. Я использую Typescrip 1.75. Я опубликовал проблему в репозитории Typescript Github .
  • 0
    работал как шарм .. большое спасибо за более чистое решение
Показать ещё 2 комментария
4

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

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 решило проблему.

3

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

"exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts",
    "typings/index.d.ts"
] 
  • 0
    У меня тоже была эта ошибка с webpack, просто перезапустив сервер исправил.
1

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

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

  • 0
    Похож на меня. Я переименовал файл машинописного текста в Visual Studio Code, который вызвал невидимый (потерянный) файл .js, который больше не показывался в IDE, но, тем не менее, отображал ошибку дублирующего идентификатора.
0

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

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

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

0

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

0

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

0

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

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

0

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

  • 0
    Есть несколько библиотек, в которых есть node_modules внутри своих папок. когда я использовал узел 4.6.0, он никогда не создавал никаких проблем, но с узлом 6.9.0 он внезапно выдает эту ошибку.
  • 0
    Интересно, с какой версии началась эта проблема? У меня была проблема с узлом 5.6.0.
-1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню