Definitelytyped: Pengidentifikasi duplikat dengan @types/node 10.0

Dibuat pada 26 Apr 2018  ·  40Komentar  ·  Sumber: DefinitelyTyped/DefinitelyTyped

Jika Anda tahu cara memperbaiki masalah, buat permintaan tarik sebagai gantinya.

  • [x] Saya mencoba menggunakan paket @types/xxxx dan mengalami masalah.
  • [ ] Saya mencoba menggunakan tsc versi stabil terbaru. https://www.npmjs.com/package/typescript
  • [ ] Saya punya pertanyaan yang tidak pantas untuk StackOverflow . (Silakan ajukan pertanyaan yang sesuai di sana).
  • [ ] [Sebutkan](https://github.com/blog/821-mention-somebody-they-re-notified) penulisnya (lihat Definitions by: di index.d.ts ) sehingga mereka dapat merespons .

    • Penulis: @.types/node 10.0

Dengan v9.6.6 semuanya baik-baik saja dengan proyek Angular saya. Ditingkatkan ke 10.0.0 dan sekarang saya mendapatkan kesalahan berikut saat menjalankan pengujian unit saya:

Error: node_modules/@types/node/index.d.ts(2381,15): error TS2300: Duplicate identifier 'URL'. node_modules/@types/node/index.d.ts(2399,15): error TS2300: Duplicate identifier 'URLSearchParams'. node_modules/@types/node/index.d.ts(2417,14): error TS2661: Cannot export 'URL'. Only local declarations can be exported from a module. node_modules/@types/node/index.d.ts(2417,19): error TS2661: Cannot export 'URLSearchParams'. Only local declarations can be exported from a module. node_modules/typescript/lib/lib.dom.d.ts(12210,11): error TS2300: Duplicate identifier 'URL'. node_modules/typescript/lib/lib.dom.d.ts(12226,13): error TS2300: Duplicate identifier 'URL'. node_modules/typescript/lib/lib.dom.d.ts(14282,11): error TS2300: Duplicate identifier 'URLSearchParams'. node_modules/typescript/lib/lib.dom.d.ts(14309,13): error TS2300: Duplicate identifier 'URLSearchParams'.

Komentar yang paling membantu

Saya akan dapat melihat ini malam ini.

Semua 40 komentar

Saya baru saja akan mencatat masalah yang sama ini!

Saya mencoba ini:

npm init
npm i -g typescript
npm i --save-dev @types/node
tsc --init
touch index.ts
tsc

Saya mendapatkan kesalahan yang sama.

Menambahkan sebutan tambahan untuk penulis terbaru: @rbuckton.

Saya juga melihat ini. Dorongan terakhir merusak build kami dengan kesalahan yang sama ini.

Juga mendapatkan ini. Sepertinya konflik dengan TypeScript dalam kasus saya.
Memperbaikinya dengan menurunkan versi ke v9.6.7

Ya. Di pos OP, konfliknya adalah dengan lib.dom.d.ts . Saya juga melihat konflik dengan lib.d.ts dan lib.es2017.full.d.ts .

ya. melihat ini juga.

Mengalami masalah ini juga, diperbaiki dengan menurunkan @types/node ke v9.6.7

Kami masih menggunakan LTS terbaru (8), jadi kami memecahkan ini (untuk saat ini) dengan menggunakan ^8.0.0 .

Saya akan dapat melihat ini malam ini.

Anda bisa mendapatkan gambaran tentang dampak dari perubahan yang melanggar ini dengan @dependabotDependabot compatibility score
Mungkin sebagian besar pengguna TS termasuk @types/node yang menyebabkan pengidentifikasi duplikat dan CI gagal .

@rbuckton Terima kasih telah melihat ini 👍

Perbaikan cepat:

npm i @types/[email protected]

Untuk pria kuno dengan nodejs v6.xx - npm i --save-dev @types/node@6

Ini rusak karena kelas-kelas ini diubah untuk diekspor secara global, baris 2380 dalam file saat ini. Lihat perbandingan sejarah di bawah ini:

https://github.com/DefinitelyTyped/DefinitelyTyped/commit/bffb03282272b37ccb12429026f4504a39a3cd83#diff -7d84e08967cded0b99ed4328aab0a1a8

Saya baru saja akan menarik dan membuat perubahan tetapi sepertinya @rbuckton sudah mendahului saya dalam prosesnya.

@robertbradleyux Di node 10.0.0, Kelas URL juga tersedia di objek global jadi ini sepertinya benar.

@rbuckton Apakah ada cara untuk memberitahu TypeScript hanya mendefinisikan kelas jika belum didefinisikan?

Dalam hal ini, baik node dan browser menerapkan Standar URL WHATWG yang sama sehingga ini mirip dengan setTimeout yang memiliki tipe pengembalian berbeda di Node.js daripada browser https://nodejs.org/dist/latest -v10.x/docs/api/timers.html

Entah bagaimana TypeScript mampu menangani setTimeout jadi pasti bisa menangani URL global, bukan?


Pembaruan Saya melihat sudah ada permintaan tarik untuk mengembalikan perubahan ini https://github.com/DefinitelyTyped/DefinitelyTyped/pull/25356

Setelah membersihkan cache npm saya, saya masih mendapatkan kesalahan asli

@kgorlick Ini tidak akan muncul sampai penerbit jenis menerbitkan jenis yang diperbarui ke npm.

@styfle , NodeJS dan DOM memiliki sedikit perbedaan dalam implementasi standar URL WHATWG (misalnya versi NodeJS memiliki toJSON() yang tidak ada dalam versi DOM, dan versi DOM memiliki createObjectURL statis

Saya sementara memperbaiki masalah menambahkan
"lib": ["es6"],
di tsconfig.json saya

@rbuckton Saya mengerti mereka mungkin beberapa perbedaan dalam definisi URL .

setTimeout memiliki tipe pengembalian yang berbeda di Node.js dari pada browser: docs

Namun entah bagaimana, memasukkan @types/node tidak merusak build. Bagaimana cara kerjanya?

IIRC, beberapa versi API pengatur waktu menjadi kelebihan beban. Masalah dengan URL adalah bahwa itu adalah tipe objek.

Mendapat kesalahan ini pada @11.9.3 dan diperbaiki oleh:
npm i @types/[email protected] --save-dev

Mendapatkan kesalahan ini
dengan "@types/node": "^11.9.4",

node_modules/@types/node/index.d.ts:75:15 - kesalahan TS2300: Pengidentifikasi duplikat 'SharedArrayBuffer'.

75 mendeklarasikan kelas SharedArrayBuffer {
~ ~ ~ ~~

node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts:24:11
24 antarmuka SharedArrayBuffer {
~ ~ ~ ~~
'SharedArrayBuffer' juga dideklarasikan di sini.
node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts:46:13
46 mendeklarasikan var SharedArrayBuffer: SharedArrayBufferConstructor;
~ ~ ~ ~~
dan di sini.

node_modules/@types/node/index.d.ts:83:15 - kesalahan TS2451: Tidak dapat mendeklarasikan ulang variabel cakupan blok 'kustom'.

dll.....

@Mulperi Saya pikir masalah Anda berbeda dengan yang di atas dan terkait dengan perubahan interface SharedArrayBuffer menjadi class SharedArrayBuffer dilakukan di #32878.

@SimonSchick Saya pikir ini harus diubah kembali karena sebenarnya hanya deklarasi maju.

@Flarna ini hanya akan berfungsi jika Anda memuat pengetikan dom, pengetikan simpul harus berfungsi tanpa memuat pengetikan dom ..

Ini bukan dom itu es2017.sharedmemory yang termasuk dalam 3.1 pengetikan melalui /// <reference lib="es2018" /> tetapi versi TypeScript yang lebih lama tidak mendukung direktif reference lib .
Deklarasi forward digunakan untuk menghindari kebutuhan bahwa setiap orang harus memasukkannya secara manual. Deklarasi penerusan harus berupa interface karena antarmuka bergabung dengan kelas sedangkan kelas tidak diizinkan untuk didefinisikan dua kali. Jadi menggunakan class untuk deklarasi maju, jeda membangun di mana lib dengan definisi sebenarnya disertakan.

@Flarna hanya akan menambahkan /// <reference lib="es2017.sharedmemory" /> ke /index.d.ts bekerja dalam kasus ini?

Juga relevan karena Atomics masih hilang dari pengetikan tersebut

Tidak karena /// <reference lib telah diperkenalkan di TypeScript 3.0 dan file yang terpengaruh adalah yang digunakan untuk 2.1...3.0.
@Mulperi Versi

Saya juga mendapatkan masalah ini. Dan mengubah ke versi sebelumnya dari @types/node bukanlah opsi yang layak, karena @types/connect menggunakan * , menarik @^11.9 , dan menyebabkan konflik dalam rangkaian pengujian.

@Flarna Saya sedang bepergian, bisakah Anda melihat ini?

@jmeberlein Versi

dibuat #33177. Sulit untuk mengatakan kapan ini digabung karena CI dalam kondisi buruk saat ini.

Versi TypeScript ^2.9.2 di package.json, menyelesaikan ke 2.9.2 di npm-shrinkwrap.json

kenapa cerita ini ditutup? Tampaknya masih rusak.

kenapa cerita ini ditutup? Tampaknya masih rusak.

Ini diselesaikan hampir setahun yang lalu, jadi sepertinya sudah diperbaiki tetapi sekarang telah mundur. Saya mungkin akan membuka edisi baru.

ng] ERROR in node_modules/@types/node/index.d.ts:73:11 - error TS2300: Duplicate identifier 'IteratorResult'. [ng] 73 interface IteratorResult<T> { } [ng] ~~~~~~~~~~~~~~ [ng] node_modules/typescript/lib/lib.es2015.iterable.d.ts:41:6 [ng] 41 type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>; [ng] ~~~~~~~~~~~~~~ [ng] 'IteratorResult' was also declared here. [ng] node_modules/typescript/lib/lib.es2015.iterable.d.ts:41:6 - error TS2300: Duplicate identifier 'IteratorResult'. [ng] 41 type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>; [ng] ~~~~~~~~~~~~~~ [ng] node_modules/@types/node/index.d.ts:73:11 [ng] 73 interface IteratorResult<T> { } [ng] ~~~~~~~~~~~~~~ [ng] 'IteratorResult' was also declared here.

Masalah masih belum terselesaikan

@thameurr Harap dicatat bahwa Anda mengomentari masalah yang ditutup beberapa waktu lalu. Saya berasumsi Anda menggunakan set @types/node, TypeScript,... versi yang berbeda dari yang disebutkan dalam masalah ini.

Bisakah Anda membuat masalah baru dengan instruksi cara mereproduksi di mana versi terbaru dari paket digunakan?

Saya mendapatkan masalah ini dengan @types/node: "13.9.5" dan telah diperbaiki dengan memutar kembali ke "12.12.31"

Type error: Duplicate identifier 'ProcessEnv'

Masalah ini masih terjadi pada saya dengan TypeScript 4.0.2. Menginstal @types/node pada versi 14.6.0 tampaknya membuat kesalahan hilang saat menjalankan tsc --noEmit .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

JWT
svipas picture svipas  ·  3Komentar

fasatrix picture fasatrix  ·  3Komentar

ArtemZag picture ArtemZag  ·  3Komentar

Loghorn picture Loghorn  ·  3Komentar

variousauthors picture variousauthors  ·  3Komentar