web-dev-qa-db-de.com

Verwirrende "doppelte Kennung" TypeScript-Fehlermeldung

Warum bekomme ich diese und viele weitere Fehler dieser Art? Ich füge einen Link zum Repo sowie die folgenden Code-Ausschnitte hinzu. Ich glaube, ich habe ein grundlegendes Missverständnis darüber, wie die Abhängigkeit und "Einbeziehung" von Verkettung funktioniert. 

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

Den gesamten Code finden Sie hier .

Meine tsconfig.json:

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

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

Meine 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"
    }
  }
}
186
pitosalas

Dies liegt an der Kombination zweier Dinge: 

Wenn in einer Datei "tsconfig.json" keine Eigenschaft "files" vorhanden ist, enthält der Compiler standardmäßig alle Dateien im übergeordneten Verzeichnis und in den Unterverzeichnissen. Wenn eine "files" -Eigenschaft angegeben wird, werden nur diese Dateien eingeschlossen.

  • Einschließen von TypeScript als eine npm-Abhängigkeit: node_modules/TypeScript/ Dies bedeutet, dass alle TypeScript enthalten sind .... lib.d.ts ist in Ihrem Projekt sowieso implizit enthalten ( http://basarat.gitbooks.io/TypeScript/content/docs/types /lib.d.ts.html ) und dessen Konflikt mit derjenigen, die mit der NPM-Version von TypeScript geliefert wird. 

Fix

Entweder Liste files oder include explizit https://basarat.gitbooks.io/TypeScript/docs/project/files.html ????

100
basarat

Update: Version 1.0 von Typings hat die Ausgabestruktur geändert und die Antwort unten bezieht sich auf die Version vor 1.0.

Wenn Sie Typings verwenden und in Ihrer Datei "tsconfig.json" ausschließen, können Sie auf das Problem doppelter Typen stoßen und Folgendes benötigen:

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

Um die Integration mit TypeScript zu vereinfachen, werden zwei Dateien generiert - typings/main.d.ts und typings/browser.d.ts -, die auf alle im Projekt installierten Typierungen verweisen, von denen jeweils nur eine verwendet werden kann.

Abhängig davon, welche Version Sie benötigen, sollten Sie die Dateien vom Typ "browser" oder "main" ausschließen (oder einschließen), nicht jedoch beide, da hier die Duplikate stammen.

Diese Typings Ausgabe erörtert es mehr.

66
RationalDev

Wenn Sie die Typisierung separat im Ordner Ordner installiert haben

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

Ich bin gerade auf dieses Problem gestoßen. Als ich npm start lief, bekam ich eine Reihe doppelter Identifizierungsfehler. 

LÖSUNG:

Führen Sie im Hauptordner des Projekts Folgendes aus: 

rm -r typings
typings install
npm start

und alles funktioniert gut.

15
user6217332

Problem wurde gelöst durch:

  1. node_modules-Ordner löschen 
  2. npm install ausführen, um alle Pakete mit korrekten Versionen abzurufen

In meinem Fall trat das Problem nach dem Ändern von Git-Zweigen auf, bei dem ein neuer Zweig einen anderen Satz Knotenmodule verwendete. Der alte Zweig verwendete TypeScript v1.8, der neue Zweig v2.0

14
Alex Klaus

Sie können auch die Option exclude in der Datei tsconfig.json wie folgt verwenden:

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

In meinem Fall bekam ich den Fehler als

node_modules/@types/es6-promise/index.d.ts (11,15): Fehler TS2300: Doppelter Bezeichner 'Promise'.

Und ich hatte @types/es6-promise auf meinem package.json, aber meine tsconfig war bereits mit target: "es6". Ich denke, es gab einen Konflikt mit Promise beim Kompilieren.

Durch das Entfernen von @types/es6-promise aus meiner package.json-Datei wurde das Problem behoben.

4
Felipe Sabino

Bei Verwendung von webpack stieß ich auf denselben Fehler, nur für den Fall, dass das Ausschließen der .d.ts-Datei in Ihrer tsconfig.json und node_modules mein Problem gelöst hat:

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

Dieses Problem wurde durch einen unerwarteten Ordner auf der Festplatte verursacht (jspm_packages, der nicht mehr verwendet wird), der nicht von der Quellcodeverwaltung (und von meiner IDE verborgen) verfolgt wurde. Dies hatte eine doppelte Installation von TypeScript zur Folge, was zu den Problemen führte.

Etwas Edge-Fall, aber hier eine Antwort hinterlassen, nur falls jemand anderes nach dieser Lösung sucht.

1
elwyn

wir haben einen lib-Ordner aus dem Website-Ordner entfernt. Dies wurde durch eine vorherige Installation von Typisierungen erstellt. das wurde doppelt. Wenn das entfernt wurde, hat es funktioniert! 

0
Blue Clouds

Ich hatte dieses Problem und es stellte sich heraus, dass ich einen zweiten node_modules-Ordner in meinem Projekt hatte, der nicht dort sein sollte :-( 

0
Bruno

Dies kann darauf zurückzuführen sein, dass Sie sowohl in Ihrem Knotenordner als auch in Abhängigkeit voneinander sind. Sie müssen zuerst überprüfen, was Sie in Ihrem Ordner @types haben. Wenn Sie sie in Abhängigkeiten haben, entfernen Sie das Duplikat. js

0
Mahdi Shahbazi

Ich hatte diesen Fehler, zusammen mit anderen, nachdem ich meine tsconfig.json in target geändert habe: "es2015" und das Modul: "es2015".

Die Basis (AngularJS2-Schnellstart) verwendete /// <reference path="../../typings/index.d.ts" /> in der Datei main.ts. Um dieses Problem zu lösen, musste ich diese Zeile entfernen.

0
Sako73

entfernen Sie diesen @ types/express-validator aus der package.json-Datei und führen Sie dann npm install aus

Weiterlesen

Author message: Dieses Paket ist veraltet Dies ist eine Definition der Stub-Typen für den Express-Validator ( https://github.com/ctavan/express-validator ). Der Express-Validator stellt seine eigenen Typdefinitionen zur Verfügung, sodass Sie @ Types/Express-Validator nicht installieren müssen! 

0
Chanaka