TypeScript: Mã nhận dạng trùng lặp 'IteratorResult'


118

Tôi đang cố gắng biên dịch qua tsc- mà tôi đã cài đặt trên toàn cầu - và tôi gặp lỗi:

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

Tôi đã @types/nodecài đặt phiên bản 10.1.0. ( @latestcó vấn đề riêng ...)

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

Nếu tôi gỡ cài đặt typescripttoàn cầu và chạy npx tscnó hoạt động, nhưng sẽ không có gì sai khi cài đặt và chạy typescripttrên toàn cầu. Rốt cuộc, đó là toàn bộ điểm của việc cài đặt mọi thứ trên toàn cầu.

Trong khi chờ đợi, tôi có một cách giải quyết là chỉ bí danh tsc (tôi đang sử dụng git bash trong Windows).

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

vấn đề này bắt đầu xuất hiện đối với tôi khi tôi nâng cấp toàn cầu từ v3.5.3 lên v3.6.2 ... vì vậy hãy đoán có điều gì đó được thay đổi ở đó. đã trợ giúp rollback hoặc có tập lệnh "build": "tsc" trong package.json và sử dụng npm run build đã trợ giúp, trong đó typecript trong package.jon cục bộ của tôi trên v3.5.3 nên npm sử dụng nó.
Anant Anand Gupta

Câu trả lời:


163

Đã tìm thấy sự cố trên GitHub - https://github.com/microsoft/TypeScript/issues/32333 có liên quan. @rbuckton đã đề xuất nâng cấp @types/node. Nó đã làm việc cho tôi.


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

21
npm update --save-dev @types/nodeđúng hơn vì nó cũng có thể là một bản nâng cấp phiên bản nhỏ, hãy xem cài đặt và cập nhật
Taran

14
Tôi đã gặp lỗi này khi chạy storybook sau khi nâng cấp dự án của mình lên Angular 9. Tôi cho rằng một cách đơn giản npm install @types/nodesẽ cài đặt phiên bản của các loại / nút mà tôi đã có trong package.json của mình, vì vậy tôi đã làm npm install @types/node@latestvà nó hoạt động.
Muhammad bin Yusrat

Sau đó, tôi gặp lỗi TS2320: Giao diện 'NodeRequire' không thể mở rộng đồng thời các loại 'Yêu cầu' và 'Yêu cầu'
Travnikov.dev

Phải gỡ bỏ node_modulesvà cài đặt chúng một lần nữa để nó hoạt động, nhưng thực sự đó là vấn đề!
Daniel Danielecki

14

Tôi đã nhận được lỗi là trong Ứng dụng góc 8 của mình và không thể giải quyết vấn đề sau khi thử tất cả các đề xuất được đưa ra ở đây bao gồm cả câu trả lời được chấp nhận. Tôi đã phải xem xét một Ứng dụng 6 góc trước đó được biên dịch mà không có lỗi và nhận ra rằng tôi có thể bỏ qua kiểm tra thư viện bằng cách bao gồm

"ignoreLibCheck": true

vào tệp tsconfig.json. Với thực tế là Ứng dụng của tôi đang chạy tốt mà không có vấn đề gì, tôi quyết định thực hiện cách tiếp cận này. Đây là cấu hình hoàn chỉnh của tệp tsconfig.json của tôi

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

Không có thêm lỗi sau khi cấu hình này. Lưu ý: Điều đó không có nghĩa là sự cố đã được giải quyết nhưng ít nhất nó cho phép tôi bỏ qua lỗi gây ra lỗi. Do thực tế là Ứng dụng của tôi đang chạy như mong đợi, tôi chỉ coi lỗi này là không liên quan vào lúc này.


8

Tôi nghi ngờ đó là vì phần bao gồm của bạn:

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

Bạn thường không cần bao gồm các tệp * .d.ts một cách rõ ràng. Và có lẽ không bao giờ các tệp khai báo từ các thư viện khác (hoặc các loại nút).

tsconfigPhần "loại trừ" của loại trừ mọi thứ theo "node_modules"mặc định (trong số những thứ khác). Khi bạn thêm, "node_modules/@types/**/*.d.ts"bạn ghi đè loại trừ và tsc cố gắng bao gồm chúng, nhưng những loại đó đã được khai báo.

Kiểm tra tài liệu Typescript trên tsconfig.json , nó giải thích chi tiết các tùy chọn cấu hình "typeRoots" , "files""include" / " lude " .


1
Đối với tôi, đó là dòng này trong tsconfig.json: "files": [ "./node_modules/@types/node/index.d.ts" ],mà tôi đã lấy từ một số hướng dẫn. Câu trả lời của bạn đã giúp!
caffeinum

3

Đối với tôi, hóa ra tôi có một node_modulesthư mục trong dự án thư mục mẹ, một cái gì đó tương tự như sau:

node_modules
my-project
- node_modules

node_modulesđã @types/nodecài đặt phiên bản cũ hơn , sự cố đã xảy ra. Trong trường hợp của tôi, tuy nhiên, giải pháp không phải là cập nhật @types/nodemà thay vào đó là loại bỏ những người đó node_modulesvì tôi đã không sử dụng chúng ngay từ đầu.

Nếu bạn thực sự cần phải có node_modulestrong thư mục mẹ với các kiểu khác nhau và đây là cách bạn muốn, thì bạn có thể chỉ định typeRootscụ thể:

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

Bằng cách đó, phụ huynh node_moduleskhông được quét các loại. Nếu không, hãy đọc tại đây: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeTHER-and-types

Theo mặc định, tất cả các gói “@types” hiển thị đều được đưa vào biên dịch của bạn. Các gói trong node_modules / @ loại của bất kỳ thư mục bao quanh nào được coi là hiển thị; cụ thể, điều đó có nghĩa là các gói bên trong ./node_modules/@types/, ../node_modules/@types/, ../../node_modules/@types/, v.v.


Điều này đã giải quyết vấn đề của tôi, cảm ơn bạn!
chrisby

2

Như @Muhammad bin Yusrat đã nói trong nhận xét của mình, hãy chạy npm i @types/node@latest( npm i @types/nodekhông hoạt động !!) nếu bạn vừa cập nhật góc lên 9. Điều đó đã hiệu quả với tôi.

Nó cũng đã thoát khỏi một lỗi giao diện điều khiển ionic 5 khác sau khi chạy ionic serve-> 'từ chối tải hình ảnh' http: localhost: 8100 / favicon.ico 'vì nó vi phạm Chính sách bảo mật nội dung sau đây .....' (xem bên dưới).

lỗi ionic 5 sau khi chạy giao bóng ion

Một lỗi 'IteratorResult' khác là do Lỗi "Loại lây lan". Hãy xem phân loại: Chỉ có thể tạo các loại chênh lệch từ các loại đối tượng . Về cơ bản ở đâu đó trong mã của bạn, bạn đã sử dụng toán tử spread như thế này return { id: doc.payload.id, ...doc.payload.data() };và bạn phải thay đổi nó thành điều này, return { id: doc.payload.id, ...doc.payload.data() as {} }; tức là thêmas {}


Chỉ cần nâng cấp từ Angular 8 lên 9, đã npm install --save-dev @types/node@latestsửa lỗi "IteratorResult", cảm ơn !!
Nier

0

Chỉ cần nâng cấp @types/nodetrong devDependencies của dự án Angular của bạn:

 npm i --save-dev @types/node

*** Không thay đổi bất cứ điều gì trong node_modules***



-1

Tôi tìm thấy chủ đề này sau khi googling lỗi. Vấn đề của tôi là bằng cách nào đó tôi có một lần nhập không cần thiết gây ra điều này:

import { error } from 'protractor';

-1

Tôi đã giải quyết vấn đề này theo cách thủ công bằng cách nhận xét một trong các khai báo "IteratorResult" giao diện trong tệp node_modules/@types/node/index.d.ts. Hy vọng điều này sẽ giúp ích.


3
Điều này hoạt động cho đến khi người khác cần sao chép / cài đặt repo của bạn
dx_over_dt Ngày

-1

Đây là cách tôi đã giải quyết nó:

npm uninstall --save-dev webpack

npm install --save-dev @angular-devkit/build-angular@latest
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.