Messaggio di errore dattiloscritto "identificatore duplicato" confuso


224

Perché ricevo questo e molti altri errori di questo tipo? Sto aggiungendo un collegamento al repository e i frammenti di codice chiave di seguito. Penso di avere un malinteso di base sul funzionamento della dipendenza e del "concatenamento".

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

Tutto il codice può essere trovato qui .

Il mio tsconfig.json:

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

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

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

Il tuo tsd.d.tsprobabilmente si presenta come un paio di tag di riferimento, e non è un file JSON.
yangmillstheory

1
Perché hai bisogno di un typings.jsonAND a tsd.d.ts?
CodyBugstein,

Ho messo la soluzione qui, puoi vedere. stackoverflow.com/questions/40404353/...
hüseyint

Risposte:


126

Ciò è dovuto alla combinazione di due cose:

  • tsconfignon avere alcuna filessezione. Da http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

    Se in tsconfig.json non è presente alcuna proprietà "file", il compilatore utilizza automaticamente tutti i file nella directory e nelle sottodirectory contenenti. Quando viene specificata una proprietà "files", vengono inclusi solo quei file.

  • Compreso typescriptcome dipendenza npm: node_modules/typescript/questo significa che tutto typescriptviene incluso .... ce n'è comunque implicitamente incluso lib.d.tsnel progetto ( http://basarat.gitbook.io/typescript/content/docs/types/lib.d.ts .html ) e in conflitto con quello fornito con la versione NPM di dattiloscritto.

fix

Elenca fileso includeesplicitamente https://basarat.gitbook.io/typescript/docs/project/files.html 🌹


7
O installare dattiloscritto a livello globale invece?
Ryan Cavanaugh,

2
Sì, non so perché sia ​​lì a livello locale :) Ho pensato che forse aveva bisogno di qualche api (a ben vedere ... è improbabile)
basarat

RyanCavanaugh sì, quello era il problema; e @basarat, non sono ancora sofisticato, quindi era solo una svista che l'ho avuto sia a livello locale che globale. O a mia difesa, che farlo nel mondo rubino da cui provengo non fa male alle cose, quindi quello era il mio contesto :) Tuttavia le informazioni che hai aggiunto alla tua risposta continuano a completare l'immagine per me. Quindi grazie. entrambi!
pitosalas,

5
Usa excludeproprietà
basarat

6
Il link Github è interrotto
Denny

70

Aggiornare : la versione 1.0 di Typings ha cambiato la struttura di output e la risposta di seguito si riferisce alla versione pre 1.0.

Se stai usando Typings ed escludi in tsconfig.json, potresti riscontrare il problema dei tipi duplicati e hai bisogno di qualcosa di simile al seguente:

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

Per semplificare l'integrazione con TypeScript, vengono generati due file - typings / main.d.ts e typings / browser.d.ts - che fanno riferimento a tutte le tipizzazioni installate nel progetto e solo una delle quali può essere utilizzata alla volta.

Quindi, a seconda della versione di cui hai bisogno, dovresti escludere (o includere) i file di tipo "browser" o "principale", ma non entrambi, poiché è qui che provengono i duplicati.

Questo numero di Typings ne discute di più.


Fantastico, questo risolve il problema con l'errore di identificatore duplicato dall'inclusione di Digitazioni nel tuo progetto :)
magicode118

perché non escludere semplicemente "digitazioni"? Le digitazioni sono solo per il tempo di sviluppo giusto, non per il tempo di esecuzione?
Eric Hartford,

Questo sta definendo dove trovare i tipi in fase di compilazione. Se si escludono "digitazioni" non è più possibile trovare alcun tipo. Il problema qui è che sta cercando di compilare e ci sono tipi duplicati. TypeScript non è un runtime, traspone il tuo codice in JavaScript.
RationalDev piace GoFundMonica il

2
In VS2017 ho dovuto escludere "bin", "obj" nell'app .NETCore2 MVC
OSP

Ho avuto lo stesso problema di OSP su questo. La cartella obj conteneva i file TypeScript, quindi venivano visualizzati come duplicati. Ha causato problemi la prima volta che ho creato ogni volta e poi ha continuato a causare problemi ogni volta che ho creato una volta modificato il tipo di build.
Grungondola,

24

Se hai installato le digitazioni separatamente nella cartella delle tipizzazioni

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

2
ah sì - l'aggiunta di digitazioni al mio exclude risolto il mio bug.
cport1,

1
Ne avevo anche una copia in / obj, che causava errori provenienti da "Typescript Virtual Projects". L'aggiunta di "obj" per escludere quelli risolti.
Jon,

Questo interrompe completamente la mia build sind che mancano le digitazioni.
Spenhouet,

21

Il problema è stato risolto semplicemente:

  1. Eliminazione della node_modulescartella
  2. In esecuzione npm installper ottenere tutti i pacchetti con le versioni corrette

Nel mio caso, il problema si è verificato dopo aver modificato i rami Git, in cui un nuovo ramo utilizzava un diverso set di moduli nodo. Il vecchio ramo utilizzava TypeScript v1.8, il nuovo v2.0


1
Yay ha funzionato per me. Inizialmente non sono stato in grado di eliminare node_modules perché dice che per eliminarlo è necessario l'accesso come amministratore. Il mio account utente ha accesso come amministratore; il vero problema era che dovevo chiudere i programmi che utilizzavano la cartella.
Drew

15

Ho appena incontrato questo problema. Quando ho corsonpm start , ho avuto un sacco di errori identificativi duplicati.

SOLUZIONE:

Dalla cartella principale del progetto eseguita:

rm -r typings
typings install
npm start

e tutto funziona bene.


Per me, stavo passando dall'uso es6-shimall'utilizzo core-jsper i miei polyfill, e questa è la soluzione che avrebbe funzionato. Un approccio meno pesante è l'uso typings prune.
StriplingWarrior,

Per me va bene. Ma suppongo che ci dovrebbe essere 'npm install' invece di 'typings install'
Ihor Khomiak,

Non ho nessuna typingscartella :(
Jamie Hutber

12

Puoi anche usare l'opzione exclude nel file tsconfig.json in questo modo:

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

4
Ho questo stesso identico problema. Questa correzione non funziona per me. Sto usando Typescrip 1.75. Ho pubblicato un problema nel repository Typithript Github .
Bart,

1
Se stai utilizzando le digitazioni e non TSD, dovresti utilizzare la soluzione proposta da @RationalDev
thitemple

4

Nel mio caso ho ricevuto l'errore come

node_modules/@types/es6-promise/index.d.ts (11,15): errore TS2300: identificatore duplicato 'Promessa'.

E avevo @types/es6-promisesul mio package.json ma il mio tsconfigera già con target: "es6". Quindi immagino ci sia stato un conflitto conPromise compilazione.

La rimozione @types/es6-promisedal mio package.jsonfile ha risolto il problema.


3

Usando il webpack mi sono imbattuto nello stesso errore, nel caso in cui l'esclusione del .d.tsfile nel tuo tsconfig.json e node_modules abbia risolto il mio problema:

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

Ho riscontrato questo errore anche con il webpack, il riavvio del server è stato risolto.
Clint,

1

Ho avuto questo problema causato dall'avere una cartella inaspettata sul disco (jspm_packages , non più utilizzata) che non è stata tracciata dal controllo del codice sorgente (e nascosta dal mio IDE). In essa era presente un'installazione duplicata di TypeScript, che ha causato i problemi.

Un po 'un caso limite ma lasciare una risposta qui nel caso in cui qualcun altro stia cercando questa soluzione.


Simile a me. Ho rinominato un file dattiloscritto in Visual Studio Code che ha causato un file .js invisibile (orfano) che non veniva più mostrato nell'IDE ma mostrava comunque l'errore di identificatore duplicato.
DAG,

0

Ho avuto questo problema e risulta che nel mio progetto c'era una seconda cartella node_modules che non doveva essere lì :-(


Ci sono alcune librerie che hanno node_modules all'interno delle loro cartelle. quando stavo usando il nodo 4.6.0 non ha mai creato alcun problema, ma con il nodo 6.9.0 improvvisamente sta lanciando quell'errore.
heman123,

Mi chiedo con quale versione è iniziato questo problema. Ho avuto il problema con il nodo 5.6.0.
Bruno,

0

Ho avuto questo errore, insieme ad altri, dopo aver cambiato il mio tsconfig.json in target: "es2015" e modulo: "es2015".

La base (AngularJS2 quickstart) utilizzata /// <reference path="../../typings/index.d.ts" />nel file main.ts. Per risolvere questo, ho dovuto rimuovere quella linea.


0

abbiamo rimosso una cartella lib dalla cartella del sito web. questo è stato creato da una precedente installazione di digitazioni. questo è diventato duplicato. Quando è stato rimosso ha funzionato!


0

Può essere a causa della presenza sia della digitazione che della dipendenza nella cartella del nodo. quindi prima controlla cosa hai nella cartella @types e se li hai nelle dipendenze, rimuovi il duplicato. per me era core.js


0

rimuovere questo @ types / express-validator dal file package.json, quindi eseguire npm install

Leggi di più

Messaggio dell'autore: questo pacchetto è stato deprecato Questa è una definizione di tipi di stub per express-validator ( https://github.com/ctavan/express-validator ). express-validator fornisce le proprie definizioni dei tipi, quindi non è necessario aver installato @ types / express-validator!



-2

Ho riscontrato un problema simile. È stato semplicemente utile spostare il mio tsconfig.json dalla radice del mio progetto a un ambito diverso. Nel mio progetto, ho spostato tsconfig.json dal root a wwwroot.


-2

Chiudere completamente la soluzione e rieseguire il progetto ha risolto il mio problema.


Non so perché sei stato votato verso il basso. Dopo aver letto la tua risposta, ho fatto clic su "Cache non valide e riavvia" in IntelliJ e il problema è stato risolto, quindi grazie!
Johannes Stadler,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.