TypeScript: Yinelenen tanımlayıcı 'IteratorResult'


118

tscDünya çapında yüklediğim aracılığıyla derlemeye çalışıyorum ve bir hata alıyorum:

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

Ben @types/nodesürümü 10.1.0 yüklü. ( @latestkendi sorunları var ...)

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

typescriptGlobal olarak kaldırır ve çalıştırırsam npx tscçalışır, ancak typescriptglobal olarak yükleme ve çalıştırma konusunda hiçbir sorun olmamalıdır . Sonuçta, işleri küresel olarak kurmanın tüm amacı budur.

Bu arada, sadece tsc takma adını veren bir çözümüm var (Windows'ta git bash kullanıyorum).

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

küresel olarak v3.5.3'ten v3.6.2'ye yükselttiğimde bu sorun benim için ortaya çıkmaya başladı ... bu yüzden orada değişen bir şey olduğunu tahmin ediyorum. rollback yardımcı oldu veya package.json'da "build": "tsc" komut dosyası bulundurmak ve npm run build kullanmak yardımcı oldu, burada yerel package.jon'daki typcript v3.5.3'teydi, bu yüzden npm bunu kullanıyor.
Anant Anand Gupta

Yanıtlar:


164

GitHub'da ilgili bir sorun bulundu - https://github.com/microsoft/TypeScript/issues/32333 . @rbuckton yükseltmeyi önerdi @types/node. Benim için çalıştı.


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

21
npm update --save-dev @types/nodeküçük bir sürüm yükseltmesi olabileceğinden daha doğrudur, bkz. yükleme vs güncelleme
Taran

14
Projemi Angular 9'a yükselttikten sonra hikaye npm install @types/nodekitabını çalıştırırken bu hatayı alıyordum. Package.json'da zaten sahip olduğum türlerin / düğümlerin sürümünün basit bir şekilde yükleneceğini varsaydım , bu yüzden yaptım npm install @types/node@latestve işe yaradı.
Muhammed bin Yusrat

Bundan sonra TS2320 hatası aldım: 'NodeRequire' arabirimi 'Require' ve 'RequireFunction' türlerini aynı anda genişletemiyor
Travnikov.dev

node_modulesÇalışması için bunları kaldırıp tekrar takmak zorunda kaldım , ama gerçekten sorun buydu!
Daniel Danielecki

17

Açısal 8 Uygulamamda is hatasını alıyordum ve kabul edilen yanıt da dahil olmak üzere burada yapılan tüm önerileri denedikten sonra sorunu çözemedim. Hatasız derlenen önceki bir açısal 6 Uygulamasına bakmak zorunda kaldım ve kütüphane kontrolünü ekleyerek atlayabileceğimi fark ettim.

"skipLibCheck": true

tsconfig.json dosyasına. Uygulamamın sorunsuz çalıştığı gerçeğiyle bu yaklaşımı benimsemeye karar verdim. Tsconfig.json dosyamın tam yapılandırması burada

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

Bu yapılandırmadan sonra başka hata yoktu. Not: Bu, sorunun çözüldüğü anlamına gelmez, ancak en azından hataya neden olan hatayı atlamama izin verdi. Uygulamamın beklendiği gibi çalıştığı için şu anda bu hatanın alakasız olduğunu düşündüm.


8

Bunun sebebi dahil etme bölümünüzün:

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

Genellikle * .d.ts dosyalarını açıkça eklemenize gerek yoktur. Ve muhtemelen diğer kitaplıklardan (veya düğüm türlerinden) bildirim dosyaları asla.

tsconfig's 'dışlamak' altında bölüm dışlayan her şeyi "node_modules"(başka şeylerin yanı sıra) varsayılan olarak. Eklediğinizde, "node_modules/@types/**/*.d.ts"bu dışlamayı geçersiz kılarsınız ve tsc onları dahil etmeye çalışır, ancak bu türler zaten bildirilmiştir.

Daktilo harfleri docs kontrol tsconfig.json , bu açıklıyor "typeRoots" , "dosyalar" ve "include" / "dışlamak" ayrıntılı olarak yapılandırma seçenekleri.


1
Benim için tsconfig.json'daki şu satırdı: "files": [ "./node_modules/@types/node/index.d.ts" ],bazı eğitimlerden aldığım. Cevabınız yardımcı oldu!
caffeinum

3

Benim için node_modules, bir üst dizin projesinde şuna benzer bir klasörüm olduğu ortaya çıktı :

node_modules
my-project
- node_modules

Daha node_moduleseski bir sürüm @types/nodekurulduğu için sorun oluştu. Benim durumumda, çözüm güncelleme değildi, @types/nodebunun yerine node_modulesilk başta kullanmadığım için bunları kaldırmaktı .

node_modulesBir üst dizinde farklı türlerde bir a'ya sahip olmanız gerekiyorsa ve bu şekilde olmasını istiyorsanız, o zaman typeRootsözellikle şunları belirtebilirsiniz :

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

Bu şekilde, ebeveyn node_modulestürleri için taranmaz. Aksi takdirde, burada okuyun: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types

Varsayılan olarak tüm görünür "@types" paketleri derlemenize dahil edilir. Herhangi bir çevreleyen klasörün node_modules / @ türlerindeki paketler görünür olarak kabul edilir; özellikle, bu ./node_modules/@types/, ../node_modules/@types/, ../../node_modules/@types/ vb. içindeki paketler anlamına gelir.


2

@Muhammad bin Yusrat'ın yorumunda söylediği gibi, 9'a yeni açısal güncelleme yaptıysanız çalıştırın npm i @types/node@latest( npm i @types/nodeçalışmıyor !!). Bu benim için çalıştı.

Ayrıca ionic serve, aşağıdaki İçerik Güvenlik Politikasını ihlal ettiği için -> 'görüntüyü yüklemeyi reddetti' http: localhost: 8100 / favicon.ico ' çalıştırdıktan sonra başka bir ionic 5 konsol hatasından kurtuldu .....' (aşağıya bakın).

iyonik sunum çalıştırıldıktan sonra iyonik 5 hatası

Başka bir 'IteratorResult' hatası, "Yayılma Türleri" Hatasından kaynaklandı. Bkz. Typescript: Yayılma türleri yalnızca nesne türlerinden oluşturulabilir . Temelde kodunuzun herhangi bir yerinde bunun gibi bir yayılma operatörü kullandınız return { id: doc.payload.id, ...doc.payload.data() };ve bunu buna değiştirmelisiniz, return { id: doc.payload.id, ...doc.payload.data() as {} }; yanias {}


Sadece Angular 8'den 9'a yükseltin npm install --save-dev @types/node@latest, "IteratorResult" hatası düzeltildi, teşekkürler !!
Nier

0

@types/nodeAngular projenizin devDependencies öğesini yükseltin :

 npm i --save-dev @types/node

*** Hiçbir şeyi değiştirmeyin node_modules***



-1

Hatayı googledikten sonra bu konuyu buldum. Benim sorunum, bir şekilde şuna neden olan gereksiz bir ithalatım olmasıydı:

import { error } from 'protractor';

-1

Bu sorunu, node_modules/@types/node/index.d.ts dosyasındaki arayüz "IteratorResult" bildiriminden birini yorumlayarak manuel olarak çözdüm. Umarım bu yardımcı olur.


3
Bu, başka birinin
deponuzu

-1

Ben böyle çözdüm:

npm uninstall --save-dev webpack

npm install --save-dev @angular-devkit/build-angular@latest
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.