TypeScript: ตัวระบุซ้ำ 'IteratorResult'


121

ฉันพยายามรวบรวมผ่าน - ที่tscฉันติดตั้งทั่วโลก - และฉันได้รับข้อผิดพลาด:

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

ฉัน@types/nodeติดตั้งเวอร์ชัน 10.1.0 แล้ว ( @latestมีปัญหาของตัวเอง ... )

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

หากฉันถอนการติดตั้งtypescriptทั่วโลกและเรียกใช้npx tscงานได้ แต่ไม่ควรมีอะไรผิดปกติกับการติดตั้งและเรียกใช้typescriptทั่วโลก ท้ายที่สุดนั่นคือจุดรวมของการติดตั้งสิ่งต่างๆทั่วโลก

ในระหว่างนี้ฉันมีวิธีแก้ปัญหาซึ่งก็คือแค่นามแฝง tsc (ฉันใช้ git bash ใน Windows)

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

ปัญหานี้เริ่มปรากฏขึ้นสำหรับฉันเมื่อฉันอัปเกรดทั่วโลกจาก v3.5.3 เป็น v3.6.2 ... ดังนั้นเดาว่ามีบางอย่างที่เปลี่ยนแปลงที่นั่น การย้อนกลับช่วยหรือมีสคริปต์ "build": "tsc" ใน package.json และใช้ npm run build ช่วยโดยที่ typescript ใน local package.jon ของฉันอยู่บน v3.5.3 ดังนั้น npm จึงใช้สิ่งนั้น
Anant Anand Gupta

คำตอบ:


170

พบปัญหาใน GitHub - https://github.com/microsoft/TypeScript/issues/32333ซึ่งเกี่ยวข้อง @rbuckton @types/nodeอัพเกรดปัญหา มันได้ผลสำหรับฉัน


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

21
npm update --save-dev @types/nodeมีความถูกต้องมากขึ้นตามที่มันอาจจะดีอัพเกรดรุ่นรองดูการติดตั้งโปรแกรมปรับปรุง VS
Taran

16
ฉันได้รับข้อผิดพลาดนี้ในการเรียกใช้ Storybook หลังจากอัปเกรดโปรเจ็กต์ของฉันเป็น Angular 9 ฉันสันนิษฐานง่ายๆว่าnpm install @types/nodeจะติดตั้งเวอร์ชันของประเภท / โหนดที่ฉันมีอยู่แล้วใน package.json ของฉันดังนั้นฉันจึงทำnpm install @types/node@latestและมันได้ผล
มูฮัมหมัดบินยุสรัต

หลังจากนั้นฉันได้รับข้อผิดพลาด TS2320: อินเทอร์เฟซ 'NodeRequire' ไม่สามารถขยายประเภท 'Require' และ 'RequireFunction' พร้อมกันได้
Travnikov.dev

ต้องลบnode_modulesและติดตั้งอีกครั้งเพื่อให้มันใช้งานได้ แต่นั่นคือปัญหา!
Daniel Danielecki

19

ฉันได้รับข้อผิดพลาด is ในแอพเชิงมุม 8 ของฉันและไม่สามารถแก้ไขปัญหาได้หลังจากลองทำตามคำแนะนำทั้งหมดที่ให้ไว้ที่นี่รวมถึงคำตอบที่ยอมรับ ฉันต้องดูแอป 6 เชิงมุมก่อนหน้านี้ที่รวบรวมโดยไม่มีข้อผิดพลาดและตระหนักว่าฉันสามารถข้ามการตรวจสอบไลบรารีได้โดยรวม

"skipLibCheck": จริง

ไปยังไฟล์ tsconfig.json ด้วยข้อเท็จจริงที่ว่าแอปของฉันทำงานได้ดีโดยไม่มีปัญหาฉันจึงตัดสินใจใช้แนวทางนี้ นี่คือการกำหนดค่าทั้งหมดของไฟล์ 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
  }
}

ไม่มีข้อผิดพลาดเพิ่มเติมหลังจากการกำหนดค่านี้ หมายเหตุ:นั่นไม่ได้หมายความว่าปัญหาได้รับการแก้ไข แต่อย่างน้อยก็ช่วยให้ฉันข้ามข้อบกพร่องที่ทำให้เกิดข้อผิดพลาดได้ เนื่องจากแอปของฉันทำงานตามที่คาดไว้ฉันจึงคิดว่าข้อผิดพลาดนี้ไม่เกี่ยวข้องในขณะนี้


8

ฉันสงสัยว่าเป็นเพราะส่วนรวมของคุณ:

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

โดยปกติคุณไม่จำเป็นต้องรวมไฟล์ * .d.ts อย่างชัดเจน และอาจไม่เคยประกาศไฟล์จากไลบรารีอื่น ๆ (หรือประเภทโหนด)

tsconfigส่วน"ไม่รวม"ของ"ไม่รวม"จะยกเว้นทุกสิ่งที่อยู่ภายใต้"node_modules"ค่าเริ่มต้น (รวมถึงสิ่งอื่น ๆ ) เมื่อคุณเพิ่ม"node_modules/@types/**/*.d.ts"คุณจะแทนที่การยกเว้นและ tsc พยายามที่จะรวมไว้ แต่ประเภทเหล่านั้นได้รับการประกาศแล้ว

ตรวจสอบเอกสาร typescript ในtsconfig.jsonซึ่งจะอธิบายรายละเอียดตัวเลือกการกำหนดค่า"typeRoots" , "files"และ"include" / "exclude"


1
สำหรับฉันมันเป็นบรรทัดนี้ใน tsconfig.json: "files": [ "./node_modules/@types/node/index.d.ts" ],ซึ่งฉันนำมาจากบทช่วยสอน คำตอบของคุณช่วยได้!
คาเฟอีน

3

สำหรับฉันปรากฎว่าฉันมีnode_modulesโฟลเดอร์ในโครงการไดเรกทอรีหลักสิ่งที่คล้ายกับสิ่งนี้:

node_modules
my-project
- node_modules

เนื่องจากnode_modulesมีการ@types/nodeติดตั้งเวอร์ชันเก่าปัญหาจึงเกิดขึ้น ในกรณีของฉันวิธีแก้ปัญหาไม่ได้อัปเดต@types/nodeแต่จะลบออกnode_modulesเนื่องจากฉันไม่ได้ใช้งานตั้งแต่แรก

หากคุณจำเป็นต้องมีnode_modulesในไดเร็กทอรีหลักที่มีประเภทต่างๆและนี่คือลักษณะที่คุณต้องการให้เป็นคุณสามารถระบุtypeRootsเฉพาะ:

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

ด้วยวิธีนี้ผู้ปกครองnode_modulesจะไม่ถูกสแกนหาประเภท ไม่เช่นนั้นโปรดอ่านที่นี่: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types

โดยค่าเริ่มต้นแพ็คเกจ“ @types” ที่มองเห็นได้ทั้งหมดจะรวมอยู่ในการคอมไพล์ของคุณ แพ็กเกจใน node_modules / @ ประเภทของโฟลเดอร์ที่ปิดล้อมจะถือว่ามองเห็นได้ โดยเฉพาะนั่นหมายถึงแพ็กเกจภายใน. / โหนด_modules/@types/, ../node_modules/@types/, ../../node_modules/@types/ และอื่น ๆ


2

ดังที่ @Muhammad bin Yusrat กล่าวไว้ในความคิดเห็นของเขาให้เรียกใช้npm i @types/node@latest( npm i @types/nodeไม่ทำงาน !!) ถ้าคุณเพิ่งอัปเดตเชิงมุมเป็น 9 นั่นได้ผลสำหรับฉัน

นอกจากนี้ยังกำจัดข้อผิดพลาดคอนโซลไอออนิก 5 อีกรายการหลังจากเรียกใช้ionic serve-> 'ปฏิเสธที่จะโหลดรูปภาพ' http: localhost: 8100 / favicon.ico 'เนื่องจากละเมิดนโยบายความปลอดภัยของเนื้อหาต่อไปนี้ ..... ' (ดูด้านล่าง)

ข้อผิดพลาดไอออนิก 5 หลังจากเรียกใช้บริการไอออนิก

ข้อผิดพลาด 'IteratorResult' เกิดจากข้อผิดพลาด "ประเภทการแพร่กระจาย" ดูประเภทสคริปต์: ประเภทการแพร่กระจายสามารถสร้างได้จากประเภทออบเจ็กต์เท่านั้น โดยทั่วไปแล้วที่ไหนสักแห่งในรหัสของคุณคุณได้ใช้ตัวดำเนินการสเปรดเช่นนี้return { id: doc.payload.id, ...doc.payload.data() };และคุณต้องเปลี่ยนเป็นเพิ่มเช่นนี้return { id: doc.payload.id, ...doc.payload.data() as {} }; as {}


เพียงอัปเกรดจาก Angular 8 เป็น 9 npm install --save-dev @types/node@latestแก้ไขข้อผิดพลาด "IteratorResult" ขอบคุณ !!
Nier


0

เพียงอัปเกรด@types/nodeใน devDependencies ของโครงการ Angular ของคุณ:

 npm i --save-dev @types/node

*** ห้ามเปลี่ยนแปลงอะไรในnode_modules***


-1

ฉันพบหัวข้อนี้หลังจาก googling ข้อผิดพลาด ปัญหาของฉันคือฉันมีการนำเข้าที่ไม่จำเป็นซึ่งทำให้เกิดสิ่งนี้:

import { error } from 'protractor';

-1

ฉันแก้ไขปัญหานี้ด้วยตนเองโดยแสดงความคิดเห็นหนึ่งในการประกาศอินเทอร์เฟซ "IteratorResult" ในไฟล์ node_modules/@types/node/index.d.ts หวังว่านี่จะช่วยได้


3
สิ่งนี้ใช้ได้จนกว่าจะมีคนอื่นมาโคลน / ติดตั้ง repo ของคุณ
dx_over_dt

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.