Confusing "duplicate identifier" Typescript error message
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"
}
}
}
Solution 1:
This is because of the combination of two things:
-
tsconfig
not having anyfiles
section. From http://www.typescriptlang.org/docs/handbook/tsconfig-json.htmlIf no "files" property is present in a tsconfig.json, the compiler defaults to including all files in the containing directory and subdirectories. When a "files" property is specified, only those files are included.
Including
typescript
as an npm dependency :node_modules/typescript/
This means that all oftypescript
gets included .... there is an implicitly includedlib.d.ts
in your project anyways (http://basarat.gitbook.io/typescript/content/docs/types/lib.d.ts.html) and its conflicting with the one that ships with the NPM version of typescript.
Fix
Either list files
or include
explicitly https://basarat.gitbook.io/typescript/docs/project/files.html 🌹
Solution 2:
Update: Version 1.0 of Typings changed the output structure and the below answer relates to pre 1.0 version.
If you are using Typings and exclude in your tsconfig.json, you may run into the issue of duplicate types and need something like the following:
{
"exclude": [
"typings/browser.d.ts",
"typings/browser",
"node_modules"
]
}
To simplify integration with TypeScript, two files - typings/main.d.ts and typings/browser.d.ts - are generated which reference all the typings installed in the project only one of which can be used at a time.
So depending on which version you need, you should exclude (or include) the "browser" or the "main" type files, but not both, as this is where the duplicates come from.
This Typings issue discusses it more.
Solution 3:
If you have installed typings separately under typings folder
{
"exclude": [
"node_modules",
"typings"
]
}
Solution 4:
Problem was solved by simply:
- Deleting the
node_modules
folder - Running
npm install
to get all packages with correct versions
In my case, the problem occurred after changing Git branches, where a new branch was using a different set of node modules. The old branch was using TypeScript v1.8, the new one v2.0