Thông báo lỗi nhận dạng trùng lặp


224

Tại sao tôi nhận được điều này và nhiều lỗi khác thuộc loại này? Tôi đang thêm một liên kết đến repo cũng như các đoạn mã khóa bên dưới. Tôi nghĩ rằng tôi có một sự hiểu lầm cơ bản về cách thức phụ thuộc và "bao gồm" chuỗi hoạt động.

csvproc(master)> tsc
node_modules/typescript/bin/lib.core.d.ts(83,5): error TS2300: Duplicate identifier 'configurable'.
node_modules/typescript/bin/lib.core.d.ts(84,5): error TS2300: Duplicate identifier 'enumerable'.
node_modules/typescript/bin/lib.core.d.ts(85,5): error TS2300: Duplicate identifier 'value'.
node_modules/typescript/bin/lib.core.d.ts(86,5): error TS2300: Duplicate identifier 'writable'.

Tất cả các mã có thể được tìm thấy ở đây .

Tsconfig.json của tôi:

{
    "compilerOptions": {
        "module": "commonjs",
        "noImplicitAny": false,
        "outDir": "built/",
        "sourceMap": true,
        "target": "es5"
    }
}

Tsd.json của tôi:

{
  "version": "v4",
  "repo": "borisyankov/DefinitelyTyped",
  "ref": "master",
  "path": "typings",
  "bundle": "typings/tsd.d.ts",
  "installed": {
    "node/node-0.10.d.ts": {
      "commit": "6387999eb899d0ba02d37dd8697647718caca230"
    },
    "should/should.d.ts": {
      "commit": "e1182d56ccb192379eade6055d9ba3fb6a0bacc4"
    }
  }
}

Tsd.d.ts của tôi:

{
  "version": "v4",
  "repo": "borisyankov/DefinitelyTyped",
  "ref": "master",
  "path": "typings",
  "bundle": "typings/tsd.d.ts",
  "installed": {
    "node/node-0.10.d.ts": {
      "commit": "6387999eb899d0ba02d37dd8697647718caca230"
    },
    "should/should.d.ts": {
      "commit": "e1182d56ccb192379eade6055d9ba3fb6a0bacc4"
    }
  }
}

tsd.d.tsCó lẽ bạn trông giống như một vài thẻ tham chiếu và không phải là tệp JSON.
yangmillstheory

1
Tại sao bạn cần một typings.jsonVÀ a tsd.d.ts?
CodyBugstein

Tôi đặt giải pháp ở đây, bạn có thể thấy. stackoverflow.com/questions
40404353 / từ

Câu trả lời:


126

Điều này là do sự kết hợp của hai điều:

  • tsconfigkhông có filesphần nào Từ http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

    Nếu không có thuộc tính "tập tin" nào xuất hiện trong tsconfig.json, trình biên dịch sẽ mặc định bao gồm tất cả các tệp trong thư mục chứa và thư mục con. Khi thuộc tính "tệp" được chỉ định, chỉ những tệp đó được bao gồm.

  • Bao gồm typescriptnhư một phụ thuộc npm: node_modules/typescript/Điều này có nghĩa là tất cả typescriptđược bao gồm .... có một cách ngầm định bao gồm lib.d.tstrong mọi dự án của bạn ( http://basarat.gitbook.io/typescript/content/docs/types/lib.d.ts .html ) và xung đột với phiên bản NPM của phiên bản NPM.

Sửa chữa

Hoặc là danh sách fileshoặc includemột cách rõ ràng https://basarat.gitbook.io/typescript/docs/project/files.html 🌹


7
Hoặc cài đặt bản in trên toàn cầu thay thế?
Ryan Cavanaugh

2
Vâng tôi không biết tại sao nó lại ở địa phương :) Tôi cho rằng có lẽ anh ta cần một số api từ nó (trong nhận thức ... không thể xảy ra)
basarat

RyanCavanaugh có, đó là vấn đề; và @basarat, tôi chưa tinh vi, vì vậy đó chỉ là một sự giám sát mà tôi có nó ở cả địa phương và toàn cầu. Hoặc để bảo vệ tôi, rằng làm điều đó trong thế giới ruby ​​nơi tôi đến không gây hại gì, vì vậy đó là bối cảnh của tôi :) Vẫn là thông tin bạn thêm vào phản hồi của bạn tiếp tục hoàn thành bức tranh cho tôi. Cảm ơn cả hai bạn!
pitosalas

5
Sử dụng excludetài sản
basarat

6
Liên kết Github bị hỏng
Denny

70

Cập nhật : Phiên bản 1.0 của typings đã thay đổi cấu trúc đầu ra và câu trả lời dưới đây liên quan đến phiên bản 1.0.

Nếu bạn đang sử dụng Kiểu và loại trừ trong tsconfig.json, bạn có thể gặp phải vấn đề về các loại trùng lặp và cần một cái gì đó như sau:

{
  "exclude": [
    "typings/browser.d.ts",
    "typings/browser",
    "node_modules"
  ]
}

Để đơn giản hóa việc tích hợp với TypeScript, hai tệp - typings / main.d.ts và typings / browser.d.ts - được tạo để tham chiếu tất cả các kiểu chữ được cài đặt trong dự án chỉ một trong số đó có thể được sử dụng tại một thời điểm.

Vì vậy, tùy thuộc vào phiên bản bạn cần, bạn nên loại trừ (hoặc bao gồm) các tệp loại "trình duyệt" hoặc "chính", nhưng không phải cả hai, vì đây là nơi các bản sao xuất phát.

Vấn đề typings này thảo luận về nó nhiều hơn.


Tuyệt vời, điều này giải quyết vấn đề với lỗi định danh trùng lặp từ bao gồm cả typings trong dự án của bạn :)
magicode118

Tại sao không loại trừ "đánh máy"? Các kiểu chữ chỉ dành cho thời gian dev đúng, không phải cho thời gian chạy?
Eric Hartford

Đây là xác định nơi để tìm các loại tại thời gian biên dịch. Nếu bạn loại trừ "đánh máy", bạn không còn có thể tìm thấy bất kỳ loại nào. Có vấn đề ở đây là nó đang cố gắng biên dịch và có các loại trùng lặp. TypeScript không phải là thời gian chạy, nó chuyển mã của bạn sang JavaScript.
RationalDev thích GoFundMonica

2
Trong VS2017 tôi đã phải loại trừ "bin", "obj" trong ứng dụng .NET .NETCore2
OSP

Tôi đã có vấn đề tương tự như OSP về vấn đề này. Thư mục obj có các tệp TypeScript trong đó, vì vậy chúng được hiển thị dưới dạng trùng lặp. Nó gây ra sự cố lần đầu tiên tôi xây dựng mỗi lần và sau đó tiếp tục gây ra sự cố mỗi lần tôi xây dựng khi tôi thay đổi loại bản dựng.
Grungondola

24

Nếu bạn đã cài đặt các kiểu chữ riêng biệt trong thư mục typings

{
  "exclude": [
    "node_modules",
    "typings"
  ]
}

2
ah có - thêm các kiểu chữ để loại trừ lỗi của tôi đã sửa lỗi của tôi.
cport1

1
Tôi cũng có một bản sao dưới / obj, điều này gây ra lỗi đến từ "Dự án ảo typcript". Thêm "obj" để loại trừ những cái cố định.
Jon

Điều này phá vỡ hoàn toàn bản dựng của tôi cho các kiểu chữ bị thiếu.
Spenhouet

21

Vấn đề đã được giải quyết bằng cách đơn giản:

  1. Xóa node_modulesthư mục
  2. Chạy npm installđể có được tất cả các gói với phiên bản chính xác

Trong trường hợp của tôi, sự cố xảy ra sau khi thay đổi các nhánh Git, trong đó một nhánh mới đang sử dụng một bộ mô-đun nút khác. Nhánh cũ đã sử dụng TypeScript v1.8, nhánh mới v2.0


1
Yay điều này làm việc cho tôi. Lúc đầu tôi không thể xóa node_modules vì ​​nó nói rằng nó cần quyền truy cập của Quản trị viên để xóa nó. Tài khoản người dùng của tôi có quyền truy cập quản trị viên; vấn đề thực sự là tôi cần phải đóng các chương trình đang sử dụng thư mục.
vẽ

15

Tôi chỉ gặp vấn đề này. Khi tôi chạy npm start, tôi đã nhận được một loạt các lỗi định danh trùng lặp.

GIẢI PHÁP:

Từ thư mục gốc của dự án chạy:

rm -r typings
typings install
npm start

và mọi thứ hoạt động tốt.


Đối với tôi, tôi đã chuyển từ sử dụng es6-shimsang sử dụng core-jscho các polyfill của mình và đây là giải pháp có thể đã hoạt động. Một cách tiếp cận ít nặng tay là sử dụng typings prune.
StriplingWar Warrior

Làm việc cho tôi. Nhưng hãy đoán rằng nên có 'cài đặt npm' thay vì 'cài đặt kiểu chữ'
Ihor Khomiak

Tôi không có typingsthư mục :(
Jamie Hutber

12

Bạn cũng có thể sử dụng tùy chọn loại trừ trong tệp tsconfig.json như vậy:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },
  "exclude": [
    "node_modules"
  ]
}

4
Tôi đang giải quyết vấn đề này chính xác. Sửa chữa này không làm việc cho tôi. Tôi đang sử dụng Bản đánh máy 1.75. Tôi đã đăng một vấn đề trong repo typcript Github .
Bart

1
Nếu bạn đang sử dụng các kiểu chữ và không phải TSD, bạn nên sử dụng giải pháp được đề xuất bởi @RationalDev
thitemple 22/03/2016

4

Trong trường hợp của tôi, tôi đã nhận được lỗi là

node_modules/@types/es6-promise/index.d.ts (11,15): lỗi TS2300: Mã định danh trùng lặp 'Promise'.

Và tôi đã có @types/es6-promisetrên pack.json nhưng tôi tsconfigđã sẵn sàng target: "es6". Vì vậy, tôi đoán đã có một cuộc xung đột vớiPromise khi biên dịch.

Xóa @types/es6-promisekhỏi package.jsontập tin của tôi đã giải quyết vấn đề.


3

Sử dụng webpack tôi đã gặp phải lỗi tương tự, chỉ trong trường hợp loại trừ .d.tstệp trong tsconfig.json và node_modules đã giải quyết vấn đề của tôi:

"exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts",
    "typings/index.d.ts"
] 

Tôi cũng gặp lỗi này với webpack, chỉ cần khởi động lại máy chủ đã sửa nó.
Clint

1

Tôi gặp vấn đề này do có một thư mục bất ngờ trên đĩa (jspm_packages , không còn được sử dụng) mà không được theo dõi bởi kiểm soát nguồn (và bị ẩn khỏi IDE của tôi). Cái này có cài đặt trùng lặp TypeScript trong đó, gây ra sự cố.

Bit của một trường hợp cạnh nhưng để lại một câu trả lời ở đây chỉ trong trường hợp người khác đang tìm kiếm giải pháp này.


Tương tự như tôi. Tôi đã đổi tên một tệp bản thảo trong Visual Studio Code, điều này gây ra một tệp .js vô hình (mồ côi) không còn hiển thị trong IDE nhưng dù sao cũng hiển thị lỗi định danh trùng lặp.
DAG

0

Tôi đã gặp vấn đề này và hóa ra tôi đã có một thư mục node_modules thứ hai trong dự án của mình mà lẽ ra không có ở đó :-(


Có một số thư viện có node_modules trong các thư mục của họ. Khi tôi đang sử dụng nút 4.6.0, nó không bao giờ tạo ra bất kỳ vấn đề nào, nhưng với nút 6.9.0, nó đột nhiên xuất hiện lỗi đó.
heman123

Tự hỏi vấn đề này bắt đầu với phiên bản nào. Tôi gặp vấn đề với nút 5.6.0.
Bruno

0

Tôi đã gặp lỗi này, cùng với những người khác, sau khi tôi thay đổi tsconfig.json thành mục tiêu: "es2015" và mô-đun: "es2015".

Cơ sở (khởi động nhanh AngularJS2) được sử dụng /// <reference path="../../typings/index.d.ts" />trong tệp main.ts. Để giải quyết điều này, tôi đã phải loại bỏ dòng đó.


0

chúng tôi đã xóa một thư mục lib từ thư mục trang web. điều này được tạo ra bởi một bản cài đặt trước đó. Điều này đã trở thành trùng lặp. Khi điều này được gỡ bỏ nó hoạt động!


0

Nó có thể là do có cả gõ và phụ thuộc trong thư mục nút của bạn. vì vậy trước tiên hãy kiểm tra những gì bạn có trong thư mục @types của bạn và nếu bạn có chúng trong phần phụ thuộc, hãy xóa bản sao. đối với tôi đó là core.js


0

xóa tệp này @ type / express-validator khỏi tệp pack.json, sau đó chạy cài đặt npm

Đọc thêm

Thông báo của tác giả: Gói này không được chấp nhận Đây là định nghĩa loại sơ khai cho trình xác thực nhanh ( https://github.com/ctavan/express-validator ). express-validator cung cấp các định nghĩa kiểu riêng của nó, vì vậy bạn không cần cài đặt @ type / express-validator!



-2

Tôi gặp phải một vấn đề tương tự. Chỉ cần di chuyển tsconfig.json của tôi từ thư mục gốc của dự án của tôi sang một phạm vi khác. Trong dự án của tôi, tôi đã chuyển tsconfig.json từ root lên wwwroot.


-2

Đóng giải pháp hoàn toàn và chạy lại dự án đã giải quyết vấn đề của tôi.


Không biết tại sao bạn bị hạ cấp. Sau khi đọc câu trả lời của bạn, tôi đã nhấp vào "Bộ nhớ cache và khởi động lại không hợp lệ" trong IntelliJ và vấn đề đã được giải quyết, vì vậy xin cảm ơn!
Julian Stadler
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.