TypeScript: zduplikowany identyfikator „IteratorResult”


118

Próbuję skompilować za tscpośrednictwem - które zainstalowałem globalnie - i otrzymuję błąd:

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

Mam @types/nodezainstalowaną wersję 10.1.0. ( @latestma swoje problemy ...)

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

Jeśli odinstaluję typescriptglobalnie i uruchomię, npx tscto działa, ale nie powinno być nic złego w instalacji i uruchomieniu typescriptglobalnie. W końcu o to chodzi w instalowaniu rzeczy globalnie.

W międzyczasie mam obejście polegające na aliasie tsc (używam git bash w systemie Windows).

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

ten problem zaczął się pojawiać, kiedy uaktualniłem globalnie z wersji 3.5.3 do 3.6.2 ... więc zgaduję, że coś tam się zmieniło. pomogło wycofanie lub posiadanie skryptu "build": "tsc" w package.json i użycie npm run build pomogło, gdzie maszynopis w moim lokalnym pliku package.jon był w wersji 3.5.3, więc npm go używa.
— Anant Anand Gupta

Odpowiedzi:


164

Znaleziono problem na GitHub - https://github.com/microsoft/TypeScript/issues/32333, który był powiązany. @rbuckton zasugerował aktualizację @types/node. U mnie to zadziałało.


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

21
npm update --save-dev @types/nodejest bardziej poprawna, ponieważ może być drobną aktualizacją wersji, patrz instalacja vs aktualizacja
— Taran

14
Otrzymałem ten błąd podczas uruchamiania programu Storybook po uaktualnieniu mojego projektu do Angular 9. Przypuszczałem, że prosta npm install @types/nodeinstalacja zainstaluje wersję types / node, które mam już w pliku package.json, więc tak zrobiłem npm install @types/node@latesti zadziałało.
— Muhammad bin Yusrat

Potem pojawił się błąd TS2320: Interfejs „NodeRequire” nie może jednocześnie rozszerzać typów „Require” i „RequireFunction”
— Travnikov.dev

Musiałem je usunąć node_modulesi zainstalować ponownie, aby działały, ale rzeczywiście był to problem!
— Daniel Danielecki

14

Otrzymałem błąd w mojej aplikacji Angular 8 i nie mogłem rozwiązać problemu po wypróbowaniu wszystkich sugestii tutaj, w tym zaakceptowanej odpowiedzi. Musiałem spojrzeć na poprzednią aplikację Angular 6, która skompilowała się bez błędów i zdałem sobie sprawę, że mogę po prostu pominąć sprawdzanie biblioteki, włączając

"skipLibCheck": prawda

do pliku tsconfig.json. Ponieważ moja aplikacja działa dobrze i bez problemów, zdecydowałem się na takie podejście. Oto pełna konfiguracja mojego pliku 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
  }
}

Po tej konfiguracji nie było więcej błędów. Uwaga: nie oznacza to, że problem został rozwiązany, ale przynajmniej pozwoliło mi pominąć błąd, który powodował błąd. Ze względu na to, że moja aplikacja działa zgodnie z oczekiwaniami, uznałem ten błąd za nieistotny w tej chwili.


8

Podejrzewam, że dzieje się tak dlatego, że sekcja zawiera:

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

Zwykle nie ma potrzeby jawnego dołączania plików * .d.ts. I prawdopodobnie nigdy nie deklaruje plików z innych bibliotek (lub typów węzłów).

tsconfig„S «wyklucza» wyklucza sekcja wszystko pod "node_modules"domyślnie (między innymi). Po dodaniu "node_modules/@types/**/*.d.ts"nadpisujesz to wykluczenie i tsc próbuje je uwzględnić, ale te typy są już zadeklarowane.

Sprawdź dokumentację Typescript na tsconfig.json , szczegółowo objaśnia opcje konfiguracji „typeRoots” , „files” i „include” / „exclude” .


1
Dla mnie była to ta linia w tsconfig.json: "files": [ "./node_modules/@types/node/index.d.ts" ],którą zaczerpnąłem z jakiegoś tutoriala. Twoja odpowiedź pomogła!
— caffeinum

3

U mnie okazało się, że mam node_modulesfolder w projekcie katalogu nadrzędnego, coś podobnego do tego:

node_modules
my-project
- node_modules

Ponieważ node_modulesmiał zainstalowaną starszą wersję @types/node, problem się pojawił . W moim przypadku rozwiązaniem nie była jednak aktualizacja, @types/nodeale usunięcie ich, node_modulesponieważ w ogóle ich nie używałem.

Jeśli faktycznie potrzebujesz mieć node_modulesw katalogu nadrzędnym z różnymi typami i tak właśnie chcesz, możesz określić typeRootskonkretnie:

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

W ten sposób rodzic node_modulesnie jest skanowany pod kątem typów. W przeciwnym razie, przeczytaj tutaj: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types

Domyślnie wszystkie widoczne pakiety „@types” są zawarte w twojej kompilacji. Pakiety w node_modules / @ typy dowolnego otaczającego folderu są uważane za widoczne; w szczególności oznacza to pakiety w ramach ./node_modules/@types/, ../node_modules/@types/, ../../node_modules/@types/ i tak dalej.


2

Jak @Muhammad bin Yusrat powiedział w swoim komentarzu, uruchom npm i @types/node@latest( npm i @types/nodenie działa !!), jeśli właśnie zaktualizowałeś kąt do 9. To zadziałało dla mnie.

Pozbył się również kolejnego błędu konsoli ionic 5 po uruchomieniu ionic serve-> „odmówił załadowania obrazu” http: localhost: 8100 / favicon.ico ”, ponieważ narusza następującą politykę bezpieczeństwa treści .....” (patrz poniżej).

ionic 5 błąd po uruchomieniu serwisu jonowego

Inny błąd „IteratorResult” był spowodowany błędem „Typy spreadów”. Zobacz Typescript: Typy rozkładówek można tworzyć tylko z typów obiektów . Zasadniczo gdzieś w swoim kodzie użyłeś operatora spreadu, takiego jak ten return { id: doc.payload.id, ...doc.payload.data() };i musisz go zmienić na tenreturn { id: doc.payload.id, ...doc.payload.data() as {} }; tj. Dodaćas {}


Po prostu zaktualizuj Angular 8 do 9, npm install --save-dev @types/node@latestnapraw błąd „IteratorResult”, dzięki !!
— Nier

0

Po prostu uaktualnij @types/node w devDependencies twojego projektu Angular:

 npm i --save-dev @types/node

*** Nie zmieniaj niczego w node_modules***



-1

Znalazłem ten wątek po wygooglowaniu błędu. Mój problem polegał na tym, że w jakiś sposób miałem niepotrzebny import, który spowodował to:

import { error } from 'protractor';

-1

Rozwiązałem ten problem ręcznie, komentując jedną z deklaracji interfejsu „IteratorResult” w pliku node_modules/@types/node/index.d.ts. Mam nadzieję, że to pomoże.


3
Działa to do momentu, gdy ktoś inny nie będzie
— musiał

-1

Oto jak to rozwiązałem:

npm uninstall --save-dev webpack

npm install --save-dev @angular-devkit/build-angular@latest
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.