TypeScript: identificatore duplicato "IteratorResult"


118

Sto provando a compilare tramite tsc- che ho installato a livello globale - e ricevo un errore:

~/AppData/Roaming/nvm/v11.15.0/node_modules/typescript/lib/lib.es2015.iterable.d.ts:41:6 - error TS2300: Duplicate identifier 'IteratorResult'.

41 type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;
        ~~~~~~~~~~~~~~

  node_modules/@types/node/index.d.ts:170:11
    170 interface IteratorResult<T> { }
                  ~~~~~~~~~~~~~~
    'IteratorResult' was also declared here.

node_modules/@types/node/index.d.ts:170:11 - error TS2300: Duplicate identifier 'IteratorResult'.

170 interface IteratorResult<T> { }
              ~~~~~~~~~~~~~~

~/AppData/Roaming/nvm/v11.15.0/node_modules/typescript/lib/lib.es2015.iterable.d.ts:41:6
    41 type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;
            ~~~~~~~~~~~~~~
    'IteratorResult' was also declared here.


Found 2 errors.

Ho installato la @types/nodeversione 10.1.0. ( @latestha i suoi problemi ...)

tsconfig.json

{
  "compilerOptions": {
    "target": "es2018",
    "moduleResolution": "node",
    "module": "commonjs",
    "jsx": "react",
    "lib": [
      "dom",
      "es2018",
      "dom.iterable",
      "scripthost"
    ],
    "typeRoots": [
      "./node_modules/@types",
      "./types"
    ],
    "types": [],

    "alwaysStrict": true,
    "strictNullChecks": true,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noUnusedLocals": true,

    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "esModuleInterop": true,

    "sourceMap": true,

    "outDir": "dist"
  },
  "files": [
    "app/index.tsx"
  ],
  "include": [
    "app/**/*.ts",
    "app/**/*.tsx",
    "test/**/*.ts",
    "test/**/*.tsx",
    "node_modules/@types/**/*.d.ts",
    "./types/**/*.d.ts"
  ],
  "exclude": [
    "dist"
  ]
}

Se disinstallo a typescriptlivello globale ed eseguo npx tsc, funziona, ma non dovrebbe esserci nulla di sbagliato nell'installazione e nell'esecuzione a typescriptlivello globale. Dopotutto, questo è il punto centrale dell'installazione di cose a livello globale.

Nel frattempo ho una soluzione alternativa che è solo alias tsc (sto usando git bash in Windows).

alias tsc="path/to/project/node_modules/.bin/tsc.cmd"

questo problema ha iniziato a sorgere per me quando ho aggiornato a livello globale dalla v3.5.3 alla v3.6.2 ... quindi suppongo che ci sia qualcosa che è cambiato lì. il rollback ha aiutato o avere lo script "build": "tsc" in package.json e l'utilizzo di npm run build ha aiutato, dove il typescript nel mio package.jon locale era su v3.5.3 quindi npm lo usa.
Anant Anand Gupta

Risposte:


164

Trovato un problema su GitHub - https://github.com/microsoft/TypeScript/issues/32333 che era correlato. @rbuckton ha suggerito l'aggiornamento @types/node. Ha funzionato per me.


38
npm install --save-dev @types/node
Coverboy

21
npm update --save-dev @types/nodeè più corretto in quanto potrebbe trattarsi di un aggiornamento di versione minore, vedere installazione vs aggiornamento
Taran

14
Ho riscontrato questo errore durante l'esecuzione di storybook dopo aver aggiornato il mio progetto ad Angular 9. Ho presunto che un semplice npm install @types/nodeavrebbe installato la versione di types / node che ho già nel mio package.json, quindi l'ho fatto npm install @types/node@lateste ha funzionato.
Muhammad bin Yusrat

Dopo di che ho ricevuto l'errore TS2320: l'interfaccia "NodeRequire" non può estendere simultaneamente i tipi "Require" e "RequireFunction"
Travnikov.dev

Ho dovuto rimuoverli node_modulese installarli di nuovo per farlo funzionare, ma in effetti era quello il problema!
Daniel Danielecki,

14

Ricevo l'errore is nella mia app angular 8 e non sono riuscito a risolvere il problema dopo aver provato tutti i suggerimenti qui, inclusa la risposta accettata. Ho dovuto guardare una precedente app angolare 6 compilata senza errori e ho capito che potevo semplicemente saltare il controllo della libreria includendo

"skipLibCheck": vero

al file tsconfig.json. Dato che la mia App funziona bene senza problemi, ho deciso di adottare questo approccio. Ecco la configurazione completa del mio file tsconfig.json

{ "compileOnSave": false,
  "compilerOptions": {
  "baseUrl": "./",
  "outDir": "./dist/out-tsc",
  "sourceMap": true,
  "declaration": false,
  "downlevelIteration": true,
  "experimentalDecorators": true,
  "module": "esnext",
  "moduleResolution": "node",
  "importHelpers": true,
  "target": "es2015",
  "typeRoots": [
  "node_modules/@types"
  ],
  "lib": [
    "es2018",
    "dom"
  ],
  "skipLibCheck": true
  },
  "angularCompilerOptions": {
  "fullTemplateTypeCheck": true,
  "strictInjectionParameters": true
  }
}

Non c'erano più errori dopo questa configurazione. Nota: ciò non significa che il problema sia stato risolto, ma almeno mi ha permesso di saltare il bug che causava l'errore. A causa del fatto che la mia app funziona come previsto, ho considerato questo errore irrilevante in questo momento.


8

Sospetto che sia perché la tua sezione include:

"include": [
    "app/**/*.ts",
    "app/**/*.tsx",
    "test/**/*.ts",
    "test/**/*.tsx",
    "node_modules/@types/**/*.d.ts",
    "./types/**/*.d.ts"
  ]

Di solito non è necessario includere esplicitamente file * .d.ts. E probabilmente non dichiarare mai file da altre librerie (o tipi di nodo).

tsconfigLa sezione "escludi" esclude tutto sotto "node_modules"per impostazione predefinita (tra le altre cose). Quando aggiungi "node_modules/@types/**/*.d.ts", sovrascrivi quell'esclusione e tsc cerca di includerli, ma quei tipi sono già dichiarati.

Controlla la documentazione di Typescript su tsconfig.json , spiega in dettaglio le opzioni di configurazione "typeRoots" , "files" e "include" / "exclude" .


1
Per me, era questa riga in tsconfig.json: "files": [ "./node_modules/@types/node/index.d.ts" ],che ho preso da qualche tutorial. La tua risposta ha aiutato!
caffeinum

3

Per me si è scoperto che avevo una node_modulescartella in un progetto di directory principale, qualcosa di simile a questo:

node_modules
my-project
- node_modules

Poiché node_modulesera @types/nodeinstallata una versione precedente di , il problema si è verificato. Nel mio caso, tuttavia, la soluzione non era quella di aggiornare, @types/nodema di rimuoverli node_modulespoiché non li utilizzavo in primo luogo.

Se in realtà hai bisogno di avere un node_modulesin una directory principale con tipi diversi ed è così che vuoi che sia, puoi specificare typeRootsspecificamente:

{
  "compilerOptions": {
    "module": "esnext",
    "target": "es6",
    "declaration": true,
    "outDir": "./dist",
    "typeRoots": ["./node_modules/@types/"]
  },
  "include": [
    "src/**/*"
  ]
}

In questo modo, il genitore node_modulesnon viene scansionato per i tipi. Altrimenti lo sono, leggi qui: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types

Per impostazione predefinita, tutti i pacchetti "@types" visibili sono inclusi nella compilation. I pacchetti nei tipi node_modules / @ di qualsiasi cartella che lo racchiude sono considerati visibili; in particolare, ciò significa pacchetti all'interno di ./node_modules/@types/, ../node_modules/@types/, ../../node_modules/@types/ e così via.


2

Come ha detto @ Muhammad bin Yusrat nel suo commento, corri npm i @types/node@latest( npm i @types/nodenon funziona !!) se hai appena aggiornato l'angolo a 9. Questo ha funzionato per me.

Si è anche sbarazzato di un altro errore della console ionico 5 dopo l'esecuzione ionic serve-> 'ha rifiutato di caricare l'immagine' http: localhost: 8100 / favicon.ico 'perché viola la seguente politica di sicurezza dei contenuti .....' (vedi sotto).

errore ionico 5 dopo aver eseguito il servizio ionico

Un altro errore "IteratorResult" è stato causato dall'errore "Spread Types". Vedere Typescript: i tipi di spread possono essere creati solo da tipi di oggetti . Fondamentalmente da qualche parte nel tuo codice hai usato un operatore di diffusione come questo return { id: doc.payload.id, ...doc.payload.data() };e devi cambiarlo in questo, return { id: doc.payload.id, ...doc.payload.data() as {} }; cioè aggiungereas {}


Basta aggiornare da Angular 8 a 9, npm install --save-dev @types/node@latestcorretto l'errore "IteratorResult", grazie !!
Nier

0

Basta aggiornare @types/nodein devDependencies del tuo progetto Angular:

 npm i --save-dev @types/node

*** Non modificare nulla in node_modules***


0

Aggiungere "skipLibCheck": truein compilerOptionsin tsconfig.json.

Questo ha risolto il problema. Controlla qui


-1

Ho trovato questo thread dopo aver cercato su Google l'errore. Il mio problema era che in qualche modo ho avuto un'importazione non necessaria che ha causato questo:

import { error } from 'protractor';

-1

Ho risolto questo problema manualmente commentando una delle dichiarazioni dell'interfaccia "IteratorResult" nel file node_modules/@types/node/index.d.ts. Spero che questo ti aiuti.


3
Funziona fino a quando qualcun altro non ha bisogno di clonare / installare il tuo repository
dx_over_dt

-1

Ecco come l'ho risolto:

npm uninstall --save-dev webpack

npm install --save-dev @angular-devkit/build-angular@latest
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.