Why am I getting this and many more errors of this kind? I am adding a link to the repo as well as key code snippets below. I think I have a basic misunderstanding of how the dependency and «include» chaining works.
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'.
All code can be found here.
My tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": false,
"outDir": "built/",
"sourceMap": true,
"target": "es5"
}
}
My tsd.json:
{
"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"
}
}
}
My tsd.d.ts:
{
"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"
}
}
}
I’m having an issue with duplicate identifier errors. It appears to stem from having the same definitions listed in multiple places.
Let’s say that I have a simple node server that utilizes the bluebird promise library. I have bluebird used in the main server code and in a library I wrote used by the server code. The structure looks like this:
|-- server.ts
|-- tsd.json
|-- typings
|-- lib
|-- mylib.ts
|-- tsd.json
|-- typings
Here is the code for and for mylib.ts
:
/// <reference path="./typings/tsd.d.ts"/>
import Promise = require('bluebird')
class MyLib {
}
export = MyLib
and server.ts
:
/// <reference path="./typings/tsd.d.ts"/>
import Promise = require('bluebird')
import MyLib = require('./lib/mylib')
class Server {
}
export = Server
As you can see, both server.ts
and mylib.ts
use the bluebird library. Since server.ts
uses mylib.ts
, it ends up importing bluebird twice, which results in errors. So when I run
tsc server.ts --module commonjs
I get
lib/typings/bluebird/bluebird.d.ts(705,9): error TS2300: Duplicate identifier ‘concurrency’.
lib/typings/bluebird/bluebird.d.ts(708,9): error TS2300: Duplicate identifier ‘spread’.
lib/typings/bluebird/bluebird.d.ts(711,9): error TS2300: Duplicate identifier ‘suffix’.
typings/bluebird/bluebird.d.ts(705,9): error TS2300: Duplicate identifier ‘concurrency’.
typings/bluebird/bluebird.d.ts(708,9): error TS2300: Duplicate identifier ‘spread’.
typings/bluebird/bluebird.d.ts(711,9): error TS2300: Duplicate identifier ‘suffix’.
Tools like npm seem to be able to handle this situation. The only way I can get typescript to handle it is by having a single tsd.json
file and corresponding typings
folder at the root of my project and having all the typescript definitions live there. Is that the generally accepted way to structure things?
Возникает при встрече компилятором повторного определения идентификатора. В сообщении указывается, с чем уже связан данный идентификатор. Это сообщение может выдаваться как при совпадении имен объектов (когда описаны два и более идентификатора с одним именем), так и при совпадении имени идентификатора с зарезервированным словом. В расчетной части зарезервированными являются все ключевые слова и встроенные функции, определенные выше по тексту локальные переменные, общие переменные и функции всех подключенных библиотек. В теле функции дополнительно являются зарезервированными имена параметров данной функции, а в библиотечном методе объекта еще и все имена полей и методов для объекта данного типа.
Не удалось скомпилировать.
/moonholdings.io/node_modules/@types/react-dom/node_modules/@types/react/index.d.ts(2312,14): Дублирующий идентификатор ‘LibraryManagedAttributes’.
Не знаю, почему я получаю это.
Я понизил мои "@types/node"
с 10 до 8, и это не сработало. Также попробовал "@types/node": "^9.6.7"
Мой репо: https://github.com/Futuratum/moonholdings.io
Мой пакет.json
{
"name": "moonholdings.io",
"version": "0.1.0",
"private": true,
"scripts": {
"build-css": "node-sass-chokidar src/ -o src/ --source-map",
"watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive --source-map",
"start": "react-scripts-ts start",
"build": "react-scripts-ts build",
"test": "react-scripts-ts test --env=jsdom",
"eject": "react-scripts-ts eject"
},
"dependencies": {
"@types/react": "^16.4.14",
"@types/react-redux": "^6.0.9",
"node-sass-chokidar": "^1.3.3",
"react": "^16.5.0",
"react-dom": "^16.5.0",
"react-redux": "^5.0.7",
"react-router-dom": "^4.3.1",
"react-scripts-ts": "2.17.0",
"redux-thunk": "^2.3.0"
},
"devDependencies": {
"@types/jest": "^23.3.2",
"@types/node": "^8.10.29",
"@types/react-dom": "^16.0.7",
"typescript": "^3.0.3"
}
}
Вот мой tsconfig
{
"compilerOptions": {
"traceResolution": false,
"strictNullChecks": true,
"noImplicitAny": true,
"module": "esnext",
"target": "es5",
"lib": [
"es2015",
"es2017",
"es6",
"es7",
"es5",
"dom"
],
"jsx": "react",
"experimentalDecorators": true,
"moduleResolution": "node",
"baseUrl": "./src",
"noUnusedLocals": true,
"noUnusedParameters": false,
"noImplicitAny": false,
"allowSyntheticDefaultImports": true,
"importHelpers": true,
"strictFunctionTypes": false
},
"include": [
"src/**/*",
"webpack/**/*"
],
"files": [
"core.ts",
"sys.ts",
"types.ts",
"tsc.ts",
"registerServiceWorker.ts",
"src/registerServiceWorker.ts",
"src/setupTests.ts"
],
"exclude": [
"typings/browser.d.ts",
"typings/browser",
"typings",
"node_modules",
"build",
"scripts",
"acceptance-tests",
"webpack",
"jest"
]
}
Почему я получаю эту и многие другие ошибки такого рода? Я добавляю ссылку на репо, а также фрагменты кода ниже. Я думаю, что у меня есть принципиальное непонимание того, как работают цепочки зависимостей и включения.
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"
}
}
Мой tsd.json:
{
"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"
}
}
}
21 ответ
Лучший ответ
Включение skipLibCheck в tsconfig исправило это для меня.
{
"compilerOptions": {
"skipLibCheck": true /* Skip type checking all .d.ts files. */
},
"exclude": ["node_modules"],
"include": ["./src/**/*.ts"]
}
9
lesterfernandez
28 Фев 2022 в 17:54
(Возможное) решение для Angular
В моем случае при установке @angularfire. Он автоматически импортировал environment
из моего файла окружения. Что дало ошибку Duplicate identifier 'environment'
.
Однако у меня уже был этот импорт в том же файле, что вызвало ошибку повторяющегося идентификатора.
Мне потребовалось создать новый проект и шаг за шагом найти эту ошибку…
TL;DR: проверьте наличие дубликатов импорта в файле, в котором возникает ошибка.
0
Ruben Szekér
18 Фев 2022 в 11:37
Полное закрытие решения и повторный запуск проекта решили мою проблему.
0
karan chavan
6 Ноя 2019 в 17:26
Вы также можете использовать опцию exclude в файле tsconfig.json следующим образом:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": false,
"noImplicitAny": false,
"removeComments": true,
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true
},
"exclude": [
"node_modules"
]
}
17
thitemple
2 Ноя 2015 в 21:52
Я просто столкнулся с этой проблемой. Когда я запустил npm start
, я получил кучу ошибок повторяющихся идентификаторов.
РЕШЕНИЕ:
Из корневой папки проекта выполните:
rm -r typings
typings install
npm start
И все работает нормально.
15
Molda
25 Июн 2016 в 23:09
В моем случае я получил ошибку как
node_modules/@types/es6-promise/index.d.ts (11,15): ошибка TS2300: повторяющийся идентификатор «Promise».
И у меня был @types/es6-promise
в моем package.json, но мой tsconfig
уже был с target: "es6"
. Итак, я предполагаю, что при компиляции произошел конфликт с Promise
.
Удаление @types/es6-promise
из моего файла package.json
решило проблему.
4
Felipe Sabino
2 Мар 2017 в 22:54
У меня возникла эта проблема, вызванная наличием неожиданной папки на диске (jspm_packages
, больше не используется), которая не отслеживается системой управления версиями (и скрыта от моей IDE). В нем была дублированная установка TypeScript, что и вызывало проблемы.
Немного крайний случай, но оставляю здесь ответ на случай, если кто-то еще охотится за этим решением.
1
elwyn
22 Сен 2016 в 02:18
Выполните следующую команду, чтобы исправить эту проблему.
npm install @types/node --save-dev
1
Natarajan Ganapathi
20 Сен 2019 в 22:48
У меня была эта проблема, и оказалось, что в моем проекте была вторая папка node_modules, которой не должно было быть
0
Bruno
28 Окт 2016 в 17:16
У меня была эта ошибка, как и другие, после того, как я изменил свой tsconfig.json на target: «es2015» и модуль: «es2015».
База (краткое руководство по AngularJS2) использовала /// <reference path="../../typings/index.d.ts" />
в файле main.ts. Чтобы решить эту проблему, мне пришлось удалить эту строку.
0
Sako73
3 Ноя 2016 в 22:31
Мы удалили папку lib из папки сайта. это было создано предыдущей установкой типизаций. это стало дубликатом. Когда это было удалено, все заработало!
0
Blue Clouds
15 Дек 2016 в 16:18
Это может быть из-за наличия как набора, так и зависимости в вашей папке узла. поэтому сначала проверьте, что у вас есть в папке @types, и если они у вас есть в зависимостях, удалите дубликат. для меня это был core.js
0
Mahdi Shahbazi
14 Ноя 2017 в 23:28
Удалите этот @ types / express-validator из файла package.json, затем запустите npm install
Прочитайте больше
Сообщение автора: Этот пакет устарел Это определение типов заглушек для экспресс-валидатора ( https://github.com/ctavan/express-validator). Экспресс-валидатор предоставляет собственные определения типов, поэтому вам не нужно устанавливать @ types / express-validator!
0
Chanaka
5 Июн 2018 в 13:48
Обновление . Типизация версии 1.0 изменила структуру вывода, и ответ ниже относится к версии до 1.0.
Если вы используете типизацию и исключаете в своем tsconfig.json, вы можете столкнуться с проблемой повторяющихся типов и вам понадобится что-то вроде следующего:
{
"exclude": [
"typings/browser.d.ts",
"typings/browser",
"node_modules"
]
}
Чтобы упростить интеграцию с TypeScript, создаются два файла — typings / main.d.ts и typings / browser.d.ts — которые ссылаются на все типы, установленные в проекте, только один из которых может использоваться одновременно.
Поэтому, в зависимости от того, какая версия вам нужна, вы должны исключить (или включить) файлы типа «браузер» или «основной», но не оба сразу, так как именно отсюда берутся дубликаты.
В этом выпуске типов он обсуждается более подробно.
73
RationalDev likes GoFundMonica
3 Июн 2016 в 14:48
Если вы установили типизацию отдельно в папку типизации, добавьте это в tsconfig.json:
{
"exclude": [
"node_modules",
"typings"
]
}
27
isherwood
15 Июн 2022 в 22:34
Проблема решилась просто:
- Удаление папки
node_modules
- Запуск
npm install
для получения всех пакетов с правильными версиями
В моем случае проблема возникла после изменения ветвей Git, где новая ветка использовала другой набор узловых модулей. Старая ветка использовала TypeScript v1.8, новая v2.0
30
Alex Klaus
18 Ноя 2016 в 03:07
Используя webpack , я столкнулся с той же ошибкой, на всякий случай исключение файла .d.ts
в вашем tsconfig.json и node_modules решило мою проблему:
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts",
"typings/index.d.ts"
]
3
kalifa17
2 Ноя 2016 в 18:15
Добавление "typeRoots": ["node_modules/@types"],
в compilerOptions в файле tsconfig.json сработало для меня.
3
Patryk Janik
13 Май 2021 в 13:22
Я столкнулся с похожей проблемой. Помогло простое перемещение моего tsconfig.json из корня моего проекта в другую область. В моем проекте я переместил tsconfig.json из корня в wwwroot.
-2
Trevor Germain
10 Мар 2017 в 19:53