TypeScript: identificador duplicado 'IteratorResult'


118

Estoy tratando de compilar a través de, tscque he instalado globalmente, y obtengo un error:

~/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.

Tengo @types/nodeinstalada la versión 10.1.0. ( @latesttiene sus propios problemas ...)

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

Si desinstalo typescriptglobalmente y ejecuto npx tsc, funciona, pero no debería haber nada de malo en instalar y ejecutar typescriptglobalmente. Después de todo, ese es el objetivo de instalar cosas a nivel mundial.

Mientras tanto, tengo una solución alternativa que es simplemente alias tsc (estoy usando git bash en Windows).

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

este problema comenzó a surgir para mí cuando actualicé globalmente de v3.5.3 a v3.6.2 ... así que supongo que hay algo que ha cambiado allí. la reversión ayudó o tener el script "build": "tsc" en package.json y el uso de npm run build ayudó, donde el mecanografiado en mi package.jon local estaba en v3.5.3 así que npm lo usa.
Anant Anand Gupta

Respuestas:


164

Encontré un problema en GitHub: https://github.com/microsoft/TypeScript/issues/32333 que estaba relacionado. @rbuckton sugirió actualizar @types/node. Funcionó para mí.


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

21
npm update --save-dev @types/nodees más correcto ya que bien puede ser una actualización de versión menor, vea instalar vs actualizar
Taran

14
Recibí este error al ejecutar el libro de cuentos después de actualizar mi proyecto a Angular 9. Supuse que un simple npm install @types/nodeinstalaría la versión de tipos / nodo que ya tengo en mi package.json, así que lo hice npm install @types/node@latesty funcionó.
Muhammad bin Yusrat

Después de eso, recibí el error TS2320: la interfaz 'NodeRequire' no puede extender simultáneamente los tipos 'Require' y 'RequireFunction'
Travnikov.dev

Tuve que quitarlos node_modulese instalarlos nuevamente para que funcionara, ¡pero ese fue el problema!
Daniel Danielecki

14

Recibí el error is en mi aplicación angular 8 y no pude resolver el problema después de probar todas las sugerencias hechas aquí, incluida la respuesta aceptada. Tuve que mirar una aplicación angular 6 anterior que se compiló sin errores y me di cuenta de que podía omitir la verificación de la biblioteca al incluir

"skipLibCheck": verdadero

al archivo tsconfig.json. Con el hecho de que mi aplicación funciona bien sin problemas, decidí adoptar este enfoque. Aquí está la configuración completa de mi archivo 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
  }
}

No hubo más errores después de esta configuración. Nota: Eso no significa que el problema esté resuelto, pero al menos me permitió omitir el error que estaba causando el error. Debido al hecho de que mi aplicación se está ejecutando como se esperaba, considero este error irrelevante en este momento.


8

Sospecho que se debe a que su sección de inclusión:

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

Por lo general, no es necesario incluir explícitamente archivos * .d.ts. Y probablemente nunca archivos de declaración de otras bibliotecas (o tipos de nodos).

tsconfigLa sección "excluir" excluye todo lo que se encuentra debajo "node_modules"de forma predeterminada (entre otras cosas). Cuando agrega "node_modules/@types/**/*.d.ts", anula esa exclusión y tsc intenta incluirlos, pero esos tipos ya están declarados.

Verifique los documentos de TypeScript en tsconfig.json , explica las opciones de configuración "typeRoots" , "files" e "include" / "exclude" en detalle.


1
Para mí, fue esta línea en tsconfig.json: "files": [ "./node_modules/@types/node/index.d.ts" ],que tomé de algún tutorial. ¡Tu respuesta ayudó!
cafeína

3

Para mí resultó que tenía una node_modulescarpeta en un proyecto de directorio principal, algo similar a esto:

node_modules
my-project
- node_modules

Dado que node_modulestenía una versión anterior de @types/nodeinstalada, surgió el problema. Sin embargo, en mi caso, la solución no fue actualizar @types/nodesino eliminarlos, node_modulesya que no los estaba usando en primer lugar.

Si realmente necesita tener un node_modulesdirectorio principal con diferentes tipos y así es como desea que sea, puede especificar typeRootsespecíficamente:

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

De esa forma, node_modulesno se escanean los tipos de los padres . De lo contrario, lo son, lea aquí: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types

De forma predeterminada, todos los paquetes "@types" visibles se incluyen en su compilación. Los paquetes en los tipos node_modules / @ de cualquier carpeta adjunta se consideran visibles; específicamente, eso significa paquetes dentro ./node_modules/@types/, ../node_modules/@types/, ../../node_modules/@types/, y así sucesivamente.


2

Como dijo @Muhammad bin Yusrat en su comentario, ejecute npm i @types/node@latest(¡¡ npm i @types/nodeno funciona !!) si acaba de actualizar angular a 9. Eso funcionó para mí.

También eliminó otro error de consola ionic 5 después de ejecutar ionic serve-> 'se negó a cargar la imagen' http: localhost: 8100 / favicon.ico 'porque viola la siguiente Política de seguridad de contenido .....' (ver más abajo).

error iónico 5 después de ejecutar servicio iónico

Otro error 'IteratorResult' fue causado por el error "Tipos de propagación". Consulte Mecanografiado: Los tipos de propagación solo se pueden crear a partir de tipos de objetos . Básicamente, en alguna parte de su código ha utilizado un operador de propagación como este return { id: doc.payload.id, ...doc.payload.data() };y debe cambiarlo a esto, return { id: doc.payload.id, ...doc.payload.data() as {} }; es decir, agregaras {}


Simplemente actualice de Angular 8 a 9, npm install --save-dev @types/node@latestsolucionó el error "IteratorResult", ¡gracias!
Nier

0

Simplemente actualice @types/nodeen devDependencies de su proyecto Angular:

 npm i --save-dev @types/node

*** No cambies nada en node_modules***



-1

Encontré este hilo después de buscar en Google el error. Mi problema fue que de alguna manera tuve una importación innecesaria que causó esto:

import { error } from 'protractor';

-1

Resolví este problema manualmente comentando una de las declaraciones de interfaz "IteratorResult" en el archivo node_modules/@types/node/index.d.ts. Espero que esto ayude.


3
Esto funciona hasta que alguien más necesite clonar / instalar su repositorio
dx_over_dt

-1

Así es como lo resolví:

npm uninstall --save-dev webpack

npm install --save-dev @angular-devkit/build-angular@latest
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.