Mensaje de error mecanografiado confuso de "identificador duplicado"

224

¿Por qué recibo este y muchos más errores de este tipo? Estoy agregando un enlace al repositorio, así como fragmentos de código clave a continuación. Creo que tengo un malentendido básico sobre cómo funciona la dependencia y el encadenamiento "incluido".

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

Mis 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"
    }
  }
}
pitosalas
fuente
Su tsd.d.tsprobablemente se parece a un par de etiquetas de referencia, y no un archivo JSON.
yangmillstheory
1
¿Por qué necesitas un typings.jsonAND a tsd.d.ts?
CodyBugstein
Puse la solución aquí, puedes ver. stackoverflow.com/questions/40404353/…
hüseyint

Respuestas:

126

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

  • tsconfigno tener ninguna filessección De http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

    Si no hay una propiedad "files" en un tsconfig.json, el compilador por defecto incluye todos los archivos en el directorio y subdirectorios que lo contienen. Cuando se especifica una propiedad "archivos", solo se incluyen esos archivos.

  • Incluyendo typescriptcomo una dependencia de npm: node_modules/typescript/Esto significa que todo typescriptse incluye ... de lib.d.tstodos modos, está implícitamente incluido en su proyecto ( http://basarat.gitbook.io/typescript/content/docs/types/lib.d.ts .html ) y está en conflicto con el que se incluye con la versión NPM del mecanografiado.

Reparar

Cualquiera de las listas fileso includeexplícitamente https://basarat.gitbook.io/typescript/docs/project/files.html 🌹

basarat
fuente
77
¿O instalar mecanografiado globalmente en su lugar?
Ryan Cavanaugh
2
Sí No sé por qué está allí localmente :) asumí tal vez necesitaba algo de API de ella (en retrospectiva ... es poco probable)
Basarat
RyanCavanaugh sí, ese era el problema; y @basarat, todavía no soy sofisticado, así que fue un descuido que lo tuve tanto a nivel local como global. O en mi defensa, que hacer eso en el mundo de rubí de donde vengo no daña las cosas, así que ese fue mi contexto :) Aún así, la información que agregaste a tu respuesta continúa completando el panorama para mí. Así que gracias. ¡Ustedes dos!
pitosalas
55
Usar excludepropiedad
basarat el
66
El enlace de Github está roto
Denny
70

Actualización : la versión 1.0 de Typings cambió la estructura de salida y la respuesta a continuación se refiere a la versión anterior a la 1.0.

Si está utilizando Typings y excluye 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 tipos instalados en el proyecto, solo uno de los cuales puede usarse a la vez.

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

Este tema de Typings lo discute más.

A RationalDev le gusta GoFundMonica
fuente
Hombre impresionante, el problema se resuelve con el error identificador duplicado desde incluyendo tipificaciones en su proyecto :)
magicode118
¿por qué no simplemente excluir "tipings"? Los tipings son solo para el tiempo de desarrollo, ¿no para el tiempo de ejecución?
Eric Hartford
Esto define dónde encontrar los tipos en tiempo de compilación. Si excluye "tipings" ya no puede encontrar ningún tipo. El problema aquí es que está intentando compilar y hay tipos duplicados. TypeScript no es un tiempo de ejecución, transpila su código a JavaScript.
RationalDev le gusta GoFundMonica
2
En VS2017 tuve que excluir "bin", "obj" en la aplicación .NETCore2 MVC
OSP
Tuve el mismo problema que OSP en este caso. La carpeta obj tenía los archivos TypeScript en ellos, por lo que se mostraban como duplicados. Causó problemas la primera vez que construí cada vez y luego siguió causando problemas cada vez que construí una vez que cambié el tipo de compilación.
Grungondola
24

Si ha instalado tipings por separado en la carpeta de tipings

{
  "exclude": [
    "node_modules",
    "typings"
  ]
}
Lovjith
fuente
2
ah sí, agregar tipings a mi exclusión solucionó mi error.
cport1
1
También tenía una copia debajo de / obj, que causó errores provenientes de "Proyectos virtuales de mecanografiado". Agregar "obj" para excluir los fijos.
Jon
Esto rompe completamente mi construcción porque faltan los tipings.
Spenhouet
21

El problema se resolvió simplemente:

  1. Eliminar el node_modules carpeta
  2. Ejecutando npm installpara obtener todos los paquetes con las versiones correctas

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

Alex Klaus
fuente
1
Sí, esto funcionó para mí. No pude eliminar node_modules al principio porque dice que necesita acceso de administrador para eliminarlo. Mi cuenta de usuario tiene acceso de administrador; El verdadero problema era que necesitaba cerrar los programas que usaban la carpeta.
Dibujó el
15

Acabo de encontrarme con este problema. Cuando corrí npm start, recibí un montón de errores de identificación duplicados.

SOLUCIÓN:

Desde la carpeta raíz del proyecto, ejecute:

rm -r typings
typings install
npm start

Y todo funciona bien.

usuario6217332
fuente
Para mí, estaba cambiando de usar es6-shima usar core-jspara mis polyfills, y esta es la solución que habría funcionado. Un enfoque menos pesado es usar typings prune.
StriplingWarrior
Funciona para mi. Pero supongo que debería haber 'npm install' en lugar de 'typings install'
Ihor Khomiak
No tengo typingscarpeta :(
Jamie Hutber
12

También puede 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"
  ]
}
ejemplo
fuente
44
Tengo exactamente el mismo problema. Esta solución no me funciona. Estoy usando Typecrip 1.75. Publiqué un problema en el repositorio de Typecript Github .
Bart
1
Si está utilizando tipings y no TSD, debe utilizar la solución propuesta por @RationalDev
thitemple
4

En mi caso recibí el error como

node_modules/@types/es6-promise/index.d.ts (11,15): error TS2300: Identificador duplicado 'Promesa'.

Y tenía @types/es6-promiseen mi package.json pero tsconfigya estaba con target: "es6". Supongo que hubo un conflicto conPromise al compilar.

Eliminarlo @types/es6-promisede mi package.jsonarchivo resolvió el problema.

Felipe Sabino
fuente
3

Al usar webpack me encontré con el mismo error, solo en caso de que excluir el .d.tsarchivo en su tsconfig.json y node_modules resolvió mi problema:

"exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts",
    "typings/index.d.ts"
] 
kalifa17
fuente
También tuve este error con webpack, solo reiniciando el servidor lo solucioné.
Clint
1

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

Un caso marginal pero dejando una respuesta aquí por si alguien más está buscando esta solución.

elwyn
fuente
Parecido a mi. Cambié el nombre de un archivo de mecanografiado en Visual Studio Code que causó un archivo .js invisible (huérfano) que ya no se mostraba en el IDE, pero mostraba el error de identificador duplicado.
DAG
0

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

Bruno
fuente
Hay algunas bibliotecas que tienen node_modules dentro de sus carpetas. cuando estaba usando el nodo 4.6.0 nunca creó ningún problema, pero con el nodo 6.9.0 de repente arroja ese error.
heman123
Me pregunto con qué versión comenzó este problema. Tuve el problema con el nodo 5.6.0.
Bruno
0

Tuve este error, junto con otros, después de cambiar mi tsconfig.json para apuntar: "es2015" y módulo: "es2015".

La base (inicio rápido de AngularJS2) utilizada /// <reference path="../../typings/index.d.ts" />en el archivo main.ts. Para resolver esto, tuve que eliminar esa línea.

Sako73
fuente
0

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

Nubes azules
fuente
0

Puede deberse a tener tanto la tipificación como la dependencia en su carpeta de nodo. así que primero verifica lo que tienes en tu carpeta @types y si los tienes en dependencias, elimina el duplicado. para mí fue core.js

Mahdi Shahbazi
fuente
0

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 código auxiliar para express-validator ( https://github.com/ctavan/express-validator ). ¡express-validator proporciona sus propias definiciones de tipo, por lo que no necesita tener instalado @ types / express-validator!

Chanaka
fuente
0

ejecutar el siguiente comando solucionará este problema.

npm install @types/node --save-dev

Natarajan Ganapathi
fuente
-2

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

Trevor Germain
fuente
-2

Cerrar la solución por completo y volver a ejecutar el proyecto resolvió mi problema.

karan chavan
fuente
No sé por qué te votaron mal. Después de leer su respuesta, hice clic en "Invalidar cachés y reiniciar" en IntelliJ y el problema se resolvió, ¡así que gracias!
Johannes Stadler