Confondendo “identificatore duplicato” messaggio di errore del typescript

Perché sto ricevendo questo e molti altri errori di questo tipo? Sto aggiungendo un link al repository e frammenti di codice chiave qui sotto. Penso di avere un malinteso fondamentale su come funziona la dipendenza e la “inclusione” 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" } } } 

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

Questo è dovuto alla combinazione di due cose:

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

  • Includendo typescript come dipendenza da npm: node_modules/typescript/ Ciò significa che tutto il typescript viene incluso …. c’è comunque un lib.d.ts implicitamente incluso nel progetto ( http://basarat.gitbooks.io/typescript/ contenuto / docs / types / lib.d.ts.html ) e il suo conflitto con quello fornito con la versione NPM di typescript.

fissare

Elenca i files esplicito o ottieni qualcosa come digit-typescript per generare questa chiave per te: https://github.com/TypeStrong/atom-typescript/blob/master/docs/tsconfig.md#filesglob

Aggiornamento : la versione 1.0 di Typings ha modificato la struttura di output e la risposta di seguito si riferisce alla versione 1.0.

Se si utilizza Typings ed exclude in tsconfig.json, è ansible che si verifichi il problema dei tipi duplicati e occorra 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, 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é è da lì che provengono i duplicati.

Questo problema di Typings lo discute di più.

Se sono stati installati tipi di tipizzazione separatamente nella cartella typings

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

Ho appena incontrato questo problema. Quando ho npm start , ho ricevuto un sacco di errori di identificazione duplicati.

SOLUZIONE:

Esegui dalla cartella principale del progetto:

 rm -r typings typings install npm start 

e tutto funziona bene.

Il problema è stato risolto semplicemente:

  1. Eliminazione della cartella node_modules
  2. Eseguire npm install per 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

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

Nel mio caso ho ricevuto l’errore

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

E ho avuto @types/es6-promise sul mio package.json ma il mio tsconfig era già in target: "es6" . Quindi immagino che ci sia stato un conflitto con Promise durante la compilazione.

La rimozione di @types/es6-promise dal mio file package.json risolto il problema.

Usando il webpack mi sono imbattuto nello stesso errore, nel caso escludesse il file .d.ts nel tuo tsconfig.json e node_modules ha risolto il mio problema:

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

Ho avuto questo problema causato dall’avere una cartella imprevista sul disco ( jspm_packages , non più in uso) che non era tracciata dal controllo del codice sorgente (e nascosta dal mio IDE). Questo ha avuto un’installazione doppia di TypeScript al suo interno, che ha causato i problemi.

Un po ‘un caso limite, ma lasciando una risposta qui nel caso in cui qualcun altro stia cercando questa soluzione.

Ho avuto questo problema e si scopre che avevo una seconda cartella node_modules nel mio progetto che non doveva essere lì 🙁

Ho avuto questo errore, insieme ad altri, dopo che ho cambiato il mio tsconfig.json al target: “es2015”, e modulo: “es2015”.

La base (AngularJS2 quickstart) ha utilizzato /// nel file main.ts. Per risolvere questo, ho dovuto rimuovere quella linea.

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

Può essere dovuto al fatto di avere sia la digitazione che la dipendenza nella cartella del nodo. quindi per prima cosa controlla cosa hai nella cartella @types e se li hai nelle dipendenze, rimuovi il duplicato. per me era core.js

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 dei tipi di stub per express-validator ( https://github.com/ctavan/express-validator ). express-validator fornisce le proprie definizioni di tipo, quindi non è necessario @ types / express-validator installato!

Mi sono imbattuto in un problema simile. Semplicemente spostando il mio tsconfig.json dalla radice del mio progetto fino a un diverso ambito aiutato. Nel mio progetto, ho spostato tsconfig.json dalla radice fino a wwwroot.