Confundiendo el “duplicate identifier” Mensaje de error de TypeScript

¿Por qué estoy obteniendo esto y muchos más errores de este tipo? Estoy agregando un enlace al repository, así como los fragmentos de código clave a continuación. Creo que tengo un malentendido básico sobre cómo funciona la dependencia y la cadena de “inclusión”.

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'. 

Todo el código se puede encontrar aquí .

Mi tsconfig.json:

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

Mi 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" } } } 

Mi 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" } } } 

Esto se debe a la combinación de dos cosas:

Si no hay una propiedad de “archivos” presente en un tsconfig.json, el comstackdor predetermina incluir todos los archivos en el directorio y subdirectorios que lo contienen. Cuando se especifica una propiedad de “archivos”, solo se incluyen esos archivos.

  • Incluir typescript como una dependencia npm: node_modules/typescript/ Esto significa que todo el typescript se incluye … hay un lib.d.ts incluido implícitamente en su proyecto de todos modos ( http://basarat.gitbooks.io/typescript/ content / docs / types / lib.d.ts.html ) y está en conflicto con el que se envía con la versión de NPM de typescript.

Fijar

O bien, enumere los files explícitamente o tenga algo como atom-typescript genere esta clave para usted: https://github.com/TypeStrong/atom-typescript/blob/master/docs/tsconfig.md#filesglob

Actualización : la versión 1.0 de Typings cambió la estructura de salida y la respuesta a continuación se relaciona con la versión pre 1.0.

Si usa Typings y exclude en su tsconfig.json, puede encontrarse con el problema de los tipos duplicados y necesitar algo como lo siguiente:

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

Para simplificar la integración con TypeScript, se generan dos archivos – typings / main.d.ts y typings / browser.d.ts – que hacen referencia a todos los typings instalados en el proyecto, solo uno de los cuales se puede usar a la vez.

Por lo tanto, dependiendo de la versión que necesite, debe excluir (o incluir) los archivos del tipo “navegador” o “principal”, pero no ambos, ya que de allí provienen los duplicados.

Este problema de TIPIFICACIONES lo discute más.

Si ha instalado typings por separado en la carpeta de typings

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

Me encontré con este problema. Cuando ejecuté npm start , obtuve un montón de errores de identificador duplicados.

SOLUCIÓN:

Desde la carpeta raíz del proyecto, ejecuta:

 rm -r typings typings install npm start 

y todo funciona bien

El problema fue resuelto simplemente:

  1. Eliminando la carpeta node_modules
  2. Ejecutar npm install para obtener todos los paquetes con las versiones correctas

En mi caso, el problema ocurrió después de cambiar las twigs de Git, donde una nueva twig estaba usando un conjunto diferente de módulos de nodo. La twig anterior usaba TypeScript v1.8, el nuevo v2.0

También podría usar la opción de exclusión en el archivo tsconfig.json de la siguiente manera:

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

En mi caso, recibí el error como

node_modules/@types/es6-promise/index.d.ts (11,15): error TS2300: identificador duplicado ‘Promise’.

Y tenía @types/es6-promise en mi paquete.json pero mi tsconfig ya estaba con el target: "es6" . Así que supongo que hubo un conflicto con Promise al comstackr.

Eliminar @types/es6-promise de mi archivo package.json resolvió el problema.

Al usar el paquete web me encontré con el mismo error, por si acaso excluyendo el archivo .d.ts en su tsconfig.json y node_modules resolvió mi problema:

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

Tuve este problema causado por tener una carpeta inesperada en el disco ( jspm_packages , ya no se usa) que no fue rastreado por el control de origen (y está oculto desde mi IDE). Esto tenía una instalación duplicada de TypeScript, lo que causó los problemas.

Es un caso poco convincente pero deja una respuesta aquí en caso de que alguien más esté buscando esta solución.

Tuve este problema y resultó que tenía una segunda carpeta node_modules en mi proyecto que no debía estar allí 🙁

Tuve este error, junto con otros, después de haber cambiado mi tsconfig.json al objective: “es2015”, y el módulo: “es2015”.

La base (inicio rápido de AngularJS2) utilizó /// en el archivo main.ts. Para resolver esto, tuve que eliminar esa línea.

eliminamos una carpeta lib de la carpeta del sitio web. esto fue creado por una instalación previa de typings. esto se convirtió en duplicado. Cuando esto fue eliminado ¡funcionó!

Puede ser debido a tener tanto tipeo como dependencia en la carpeta de su nodo. así que primero verifique lo que tiene en su carpeta @types y si los tiene en dependencias, elimine el duplicado. para mí fue core.js

elimine este @ types / express-validator del archivo package.json, luego ejecute npm install

Lee mas

Mensaje del autor: este paquete ha quedado en desuso. Esta es una definición de tipos de stub para express-validator ( https://github.com/ctavan/express-validator ). express-validator proporciona sus propias definiciones de tipo, por lo que no necesita @ types / express-validator instalado.

Me encontré con un problema similar. Simplemente moviendo mi tsconfig.json desde la raíz de mi proyecto hasta un scope diferente ayudó. En mi proyecto, moví tsconfig.json de la raíz hasta wwwroot.