Message d'erreur tapuscrit «identificateur en double» déroutant


224

Pourquoi est-ce que j'obtiens cela et bien d'autres erreurs de ce type? J'ajoute un lien vers le référentiel ainsi que des extraits de code clés ci-dessous. Je pense que j'ai un malentendu de base sur le fonctionnement de la dépendance et de "l'inclusion" du chaînage.

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

Tout le code peut être trouvé ici .

Mon tsconfig.json:

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

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

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

Votre tsd.d.tsressemble probablement à quelques balises de référence, et non à un fichier JSON.
— yangmillstheory

1
Pourquoi avez-vous besoin d'un typings.jsonET d'un tsd.d.ts?
— CodyBugstein

Je mets la solution ici, vous pouvez voir. stackoverflow.com/questions/40404353/…
— hüseyint

Réponses:


126

Cela est dû à la combinaison de deux choses:

  • tsconfigne pas avoir de filessection. Sur http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

    Si aucune propriété "files" n'est présente dans un tsconfig.json, le compilateur par défaut inclut tous les fichiers dans le répertoire et les sous-répertoires contenant. Lorsqu'une propriété "files" est spécifiée, seuls ces fichiers sont inclus.

  • Inclusion en typescripttant que dépendance npm: node_modules/typescript/Cela signifie que tout typescriptest inclus .... il y a de toute façon implicitement inclus lib.d.tsdans votre projet ( http://basarat.gitbook.io/typescript/content/docs/types/lib.d.ts .html ) et son conflit avec celui fourni avec la version NPM de tapuscrit.

Réparer

Soit la liste filesou includeexplicitement https://basarat.gitbook.io/typescript/docs/project/files.html 🌹


7
Ou installez-vous globalement à la place?
— Ryan Cavanaugh

2
Ouais, je ne sais pas pourquoi il est là localement :) J'ai supposé qu'il avait peut-être besoin d'un peu d'API (avec le recul ... c'est peu probable)
— basarat

RyanCavanaugh oui, c'était le problème; et @basarat, je ne suis pas encore sophistiqué, donc c'était juste un oubli que je l'avais à la fois localement et globalement. Ou pour ma défense, que faire ça dans le monde rubis d'où je viens ne nuit pas aux choses, alors c'était mon contexte :) Pourtant, les informations que vous avez ajoutées à votre réponse continuent de compléter l'image pour moi. Donc merci. vous deux!
— pitosalas

5
Utiliser la excludepropriété
— basarat

6
Le lien Github est rompu
— Denny

70

Mise à jour : la version 1.0 de Typings a changé la structure de sortie et la réponse ci-dessous concerne la version antérieure à 1.0.

Si vous utilisez des typages et les excluez dans votre tsconfig.json, vous pouvez rencontrer le problème des types en double et avoir besoin de quelque chose comme ceci:

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

Pour simplifier l'intégration avec TypeScript, deux fichiers - typings / main.d.ts et typings / browser.d.ts - sont générés et font référence à toutes les saisies installées dans le projet dont un seul peut être utilisé à la fois.

Donc, selon la version dont vous avez besoin, vous devez exclure (ou inclure) les fichiers de type "navigateur" ou "principal", mais pas les deux, car c'est de là que proviennent les doublons.

Ce problème de dactylographie en parle plus.


Homme génial, cela résout le problème avec l'erreur d'identificateur en double de l'inclusion de dactylographies dans votre projet :)
— magicode118

pourquoi ne pas simplement exclure les "dactylographies"? Les saisies ne concernent que le temps de développement, pas le temps d'exécution?
— Eric Hartford

Ceci définit où trouver les types au moment de la compilation. Si vous excluez les "saisies", vous ne pouvez plus trouver de types. Le problème ici est qu'il essaie de compiler et qu'il existe des types en double. TypeScript n'est pas un runtime, il transpose votre code en JavaScript.
— RationalDev aime GoFundMonica

2
Dans VS2017, j'ai dû exclure "bin", "obj" dans l'application .NETCore2 MVC
— OSP

J'ai eu le même problème que OSP sur celui-ci. Le dossier obj contenait les fichiers TypeScript, ils apparaissaient donc comme des doublons. Cela a causé des problèmes la première fois que j'ai construit à chaque fois et a continué à causer des problèmes à chaque fois que j'ai construit une fois que j'ai changé le type de construction.
— Grungondola

24

Si vous avez installé les saisies séparément dans le dossier des saisies

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

2
ah oui - l'ajout de typages à mon exclusion a corrigé mon bogue.
— cport1

1
J'avais également une copie sous / obj, ce qui a provoqué des erreurs provenant de "Typescript Virtual Projects". Ajout de "obj" pour exclure ceux corrigés.
— Jon

Cela casse complètement ma version car les saisies sont manquantes.
— Spenhouet

21

Le problème a été résolu simplement:

  1. Suppression du node_modulesdossier
  2. En cours npm installd' exécution pour obtenir tous les packages avec les versions correctes

Dans mon cas, le problème s'est produit après avoir changé les branches Git, où une nouvelle branche utilisait un ensemble différent de modules de nœuds. L'ancienne branche utilisait TypeScript v1.8, la nouvelle v2.0


1
Oui, cela a fonctionné pour moi. Je n'ai pas pu supprimer node_modules au début, car il dit qu'il a besoin d'un accès administrateur pour le supprimer. Mon compte d'utilisateur dispose d'un accès administrateur; le vrai problème était que je devais fermer les programmes qui utilisaient le dossier.
— Drew

15

Je viens de rencontrer ce problème. Quand j'ai couru npm start, j'ai eu un tas d'erreurs d'identification en double.

SOLUTION:

À partir du dossier racine du projet, exécutez:

rm -r typings
typings install
npm start

et tout fonctionne bien.


Pour moi, je passais de l'utilisation es6-shimà l'utilisation core-jspour mes polyfills, et c'est la solution qui aurait fonctionné. Une approche moins lourde est à utiliser typings prune.
— StriplingWarrior

Travaille pour moi. Mais devinez qu'il devrait y avoir 'npm install' au lieu de 'typings install'
— Ihor Khomiak

Je n'ai pas de typingsdossier :(
— Jamie Hutber

12

Vous pouvez également utiliser l'option d'exclusion dans le fichier tsconfig.json comme ceci:

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

4
J'ai exactement le même problème. Ce correctif ne fonctionne pas pour moi. J'utilise Typescrip 1.75. J'ai posté un problème dans le repo Typescript Github .
— Bart

1
Si vous utilisez des typages et non TSD vous devez utiliser la solution proposée par @RationalDev
— thitemple

4

Dans mon cas, j'ai eu l'erreur comme

node_modules/@types/es6-promise/index.d.ts (11,15): erreur TS2300: identificateur en double 'Promise'.

Et j'avais @types/es6-promisesur mon package.json mais mon tsconfigétait déjà avec target: "es6". Je suppose donc qu'il y avait un conflit avec Promiselors de la compilation.

Retirer @types/es6-promisede monpackage.json fichier a résolu le problème.


3

En utilisant webpack, je suis tombé sur la même erreur, juste au cas où l'exclusion du .d.tsfichier dans votre tsconfig.json et node_modules a résolu mon problème:

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

J'ai aussi eu cette erreur avec webpack, juste le redémarrage du serveur l'a corrigé.
— Clint

1

J'ai rencontré ce problème en raison d'un dossier inattendu sur le disque (jspm_packages , qui n'est plus utilisé) qui n'a pas été suivi par le contrôle de source (et caché de mon IDE). Cela avait une installation en double de TypeScript, ce qui a causé les problèmes.

Un peu un cas de bord mais laissant une réponse ici juste au cas où quelqu'un d'autre chercherait cette solution.


Comme moi. J'ai renommé un fichier dactylographié dans Visual Studio Code qui a provoqué un fichier .js invisible (orphelin) qui ne s'affichait plus dans l'IDE mais montrait néanmoins l'erreur d'identificateur en double.
— DAG

0

J'ai eu ce problème et il s'avère que j'avais un deuxième dossier node_modules dans mon projet qui n'était pas censé être là :-(


Certaines bibliothèques contiennent des modules node_modules dans leurs dossiers. lorsque j'utilisais le noeud 4.6.0, cela n'a jamais créé de problème, mais avec le noeud 6.9.0, il lance soudainement cette erreur.
— heman123

Je me demande avec quelle version ce problème a commencé. J'ai eu le problème avec le nœud 5.6.0.
— Bruno

0

J'ai eu cette erreur, ainsi que d'autres, après avoir changé mon tsconfig.json pour cibler: "es2015" et module: "es2015".

Base (AngularJS2 quickstart) utilisée /// <reference path="../../typings/index.d.ts" />dans le fichier main.ts. Pour résoudre ce problème, j'ai dû supprimer cette ligne.


0

nous avons supprimé un dossier lib du dossier du site Web. cela a été créé par une installation précédente de dactylographies. cela est devenu double. Lorsque cela a été supprimé, cela a fonctionné!


0

Cela peut être dû au fait d'avoir à la fois la saisie et la dépendance dans votre dossier de noeud. vérifiez d'abord ce que vous avez dans votre dossier @types et si vous les avez dans les dépendances, supprimez le doublon. pour moi c'était core.js


0

supprimez ce @ types / express-validator du fichier package.json, puis exécutez npm install

Lire la suite

Message de l'auteur: ce package a été déprécié Il s'agit d'une définition des types de stub pour express-validator ( https://github.com/ctavan/express-validator ). express-validator fournit ses propres définitions de types, vous n'avez donc pas besoin d'installer @ types / express-validator!



-2

J'ai rencontré un problème similaire. Le simple fait de déplacer mon tsconfig.json de la racine de mon projet vers une autre portée m'a aidé. Dans mon projet, j'ai déplacé tsconfig.json de la racine vers wwwroot.


-2

La fermeture complète de la solution et la relance du projet ont résolu mon problème.


Je ne sais pas pourquoi vous avez voté contre. Après avoir lu votre réponse, j'ai cliqué sur "Invalider les caches et redémarrer" dans IntelliJ et le problème a été résolu, alors merci!
— Johannes Stadler
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.