Definitelytyped: node_modules/@types/react-native/globals.d.ts (36,15): Pengidentifikasi duplikat 'FormData'.

Dibuat pada 22 Feb 2019  ·  85Komentar  ·  Sumber: DefinitelyTyped/DefinitelyTyped

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

  • [x] Saya mencoba menggunakan paket @types/styled-components dan mengalami masalah karena sejak v.4.1.9 ketergantungan konflik lainnya ditambahkan (@types/react-native) dan konflik dengan @types/node . Lihat komit

  • [x] Saya mencoba menggunakan versi stabil terbaru(3.3.3333) dari tsc. https://www.npmjs.com/package/typescript

  • [ ] Saya punya pertanyaan yang tidak pantas untuk StackOverflow . (Silakan ajukan pertanyaan yang sesuai di sana).
  • [x] [Sebutkan](https://github.com/blog/821-mention-somebody-they-re-notified) penulis (lihat Definitions by: di index.d.ts ) sehingga mereka dapat menanggapi.

    • Penulis: @jkillian @Igorbek @Igmat @lavoaster @Jessidhia @eps1lon @flavordaaave

      cara memperbanyak:

  • Aplikasi reaksi instal baru dengan perintah
    yarn create react-app my-app-ts --scripts-version=react-scripts-ts

  • tambahkan komponen bergaya
    yarn add styled-components
    yarn add -D @types/styled-components
  • impor ThemeProvider ke src/index.tsx dan bungkus ke
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {ThemeProvider} from "styled-components";
import App from './App';
import './index.css';
import registerServiceWorker from './registerServiceWorker';

ReactDOM.render(
    <ThemeProvider theme={{}}>
        <App />
    </ThemeProvider>,
  document.getElementById('root') as HTMLElement
);
registerServiceWorker();
  • jalankan perintah build:
    yarn start
  • Hasil yang diharapkan:
    Lihat aplikasi reaksi
  • Hasil saat ini:

image

Ada banyak kegagalan menurut banyak definisi yang bertentangan dengan lib.dom
image

Komentar yang paling membantu

Diperbaiki dengan mengatur compilerOptions.types secara manual

{
  "compilerOptions": {
  ...
    "types": ["react", "jest"]
  }
  ...
}

Semua 85 komentar

Sama disini

Mengapa @types/react-native ditambahkan sama sekali? Saya memiliki proyek web reaksi, mengapa saya harus menginstal pengetikan yang tidak saya gunakan?

Diperbaiki dengan mengatur compilerOptions.types secara manual

{
  "compilerOptions": {
  ...
    "types": ["react", "jest"]
  }
  ...
}

Saya memiliki masalah yang sama juga.

Masalah yang sama di sini.
Karena saya memiliki beberapa definisi tipe dalam proyek saya, saya menetapkan dependensi @types/styled-components ke versi sebelumnya.

Saya pikir menambahkan tipe secara eksplisit ke tsconfig.json adalah solusi yang buruk.
Akan lebih baik untuk memisahkan jenis untuk styled-components untuk web dan untuk asli.

Saya mengalami masalah dengan FormData ini, saya menggunakan typescript: 3.3.333 sini adalah package.json dan tsconfig.json

PAKET JSON
"dependencies": { "@material-ui/core": "^3.9.2", "@types/react-loadable": "^5.5.0", "@types/react-router-dom": "^4.3.1", "prettier": "^1.16.4", "react": "^16.8.4", "react-dom": "^16.8.4", "react-loadable": "^5.5.0", "react-router-dom": "^5.0.0", "react-scripts-ts": "3.1.0", "styled-components": "^4.1.3" }, "devDependencies": { "@types/jest": "^24.0.11", "@types/node": "^11.11.3", "@types/react": "^16.8.8", "@types/react-dom": "^16.8.2", "@types/styled-components": "^4.1.12", "eslint": "5.3.0", "eslint-config-airbnb-base": "13.1.0", "eslint-plugin-import": "^2.14.0", "typescript": "^3.3.3333" }

TSCONFIG JSON
{ "compilerOptions": { "baseUrl": ".", "outDir": "build/dist", "module": "esnext", "target": "es5", "lib": ["es6", "dom"], "sourceMap": true, "allowJs": true, "jsx": "react", "moduleResolution": "node", "rootDir": "src", "forceConsistentCasingInFileNames": true, "noImplicitReturns": true, "noImplicitThis": true, "noImplicitAny": true, "importHelpers": true, "strictNullChecks": true, "suppressImplicitAnyIndexErrors": true, "noUnusedLocals": true, "esModuleInterop": true, "types": ["styled-components", "react", "react-dom", "jest"] }, "exclude": [ "node_modules", "build", "scripts", "acceptance-tests", "webpack", "jest", "src/setupTests.ts" ] }

Saya memiliki masalah yang sama. Untungnya, saya dapat mengatasi masalah ini dengan mengunci versi @types/styled-components ke 4.1.8

Sama di sini, saya harus memutar kembali ke versi sebelumnya, atau menambahkan skrip postinstall untuk menghapus reaksi asli dari node_modules

Bagaimana Anda bisa menggunakan komponen gaya di web sama sekali jika dependensinya berbenturan secara default dengan dom libs?!
Ini gila!

Saya memiliki masalah yang sama dan saya juga memperhatikan bahwa tidak semua penulis diberi tahu. Keduanya hilang: @eps1lon @flavordaaave

@ArthurBrito terima kasih, daftar penulis telah diperbarui.

Masalah ini juga terjadi pada saya. @types/react-native tidak boleh menjadi ketergantungan dalam proyek web. Jenis ini harus dipisahkan

Sejauh yang saya tahu ini disebabkan oleh #32843 yang dirilis sebagai 4.1.9 . Komentar ini mendukung hal itu.

Saya memposting komentar di utas yang merujuk ke masalah ini.

/cc @minestarks

memperbaiki versi ke 4.1.8 berhasil untuk saya

Apakah ada PR di sini yang membahas masalah ini? Aneh Anda tidak dapat menggunakan komponen gaya dalam proyek web.

Punya masalah yang sama, memang ini tentang @types/styled-component .

my-app git:(master) ✗ npm ls @types/react-native
[email protected] /Users/devniel/dev/electron/my-app
└─┬ @types/[email protected]
  └── @types/[email protected]

Setiap pembaruan untuk masalah ini?

Buat file .yarnclean dengan konten berikut:

@types/react-native

memperbaiki masalah

Setengah tahun dan masih belum ada pembaruan untuk masalah ini?

Benar-benar tidak ada pembaruan???

Menurut pendapat saya, solusi terbaik adalah menjadikan @types/react-native ketergantungan rekan, tetapi sepengetahuan saya types-publisher tidak mendukung ini saat ini. Bisakah salah satu pengelola memverifikasi bahwa saya benar dan peerDep adalah solusinya? Saya mungkin dapat meluangkan waktu di akhir pekan untuk menambahkan dukungan peerDep ke types-publisher, jika kami siap melakukannya.

Menurut saya, solusi terbaik adalah menjadikan @types/react-native sebagai ketergantungan rekan

Hmm, jika @types/react-native adalah peer dep, saya harus mendeklarasikannya sebagai dependensi untuk menggunakan @types/styled-components dalam proyek non-React Native. Itu tidak ideal.

Idealnya @types/react-native tidak akan dibutuhkan oleh proyek Non-React Native; dan saya terutama tidak perlu _declare_ sebagai ketergantungan.

Apakah maksud Anda menjadikannya sebagai Dependensi opsional?

@paulmelnikow , ya, Anda benar, saya bingung keduanya. Anda masih tidak perlu mendeklarasikan @types/react-native sebagai dependensi untuk menggunakan @types/styled-components , tetapi Anda akan mendapatkan peringatan sial, jadi optionalDeps adalah solusi yang lebih baik, tentu saja. types-publisher tidak mendukung mereka juga, dan saya akan mencoba untuk memeriksanya

Menurunkan versi ke "@types/styled-components": "4.0.0" memecahkan masalah.

Tidak, itu tidak memecahkan. Ini menyapu masalah di bawah karpet

Tidak, itu tidak memecahkan. Ini menyapu masalah di bawah karpet

Katakanlah itu dikompilasi lagi? ;-)

Buat file .yarnclean dengan konten berikut:

@types/react-native

memperbaiki masalah

Apakah ada yang setara dengan npm ?

ada kemajuan dalam masalah ini?
itu membuat komponen-gaya tidak dapat digunakan dengan TypeScript.

Menyelami kode sebenarnya dari repo ini, Anda dapat dengan jelas melihat bahwa @types/react-native HANYA diperlukan dalam .d.ts aktual dan file uji untuk integrasi React Native. Saya pikir solusi yang lebih tepat adalah untuk apa pun yang terkait dengan React Native untuk dipecah menjadi submodule/opsional/ketergantungan rekan itu sendiri, konsisten dengan perilaku bagaimana styled-components benar-benar bekerja, Anda mengimpor styled-components/native jika Anda menginginkan barang React Native. Anda tidak mengimpor styled-components dan mendapatkan seluruh jungle barang React Native juga pada saat runtime, jadi dengan mengimpor styled-components saya seharusnya juga tidak mendapatkan seluruh jungle @types/react-native jenis.

Saya pikir untuk sementara integrasi reaksi-asli harus dihapus dari versi NPM yang diterbitkan dari paket ini, dan diterbitkan sebagai paketnya sendiri. Seperti berdiri ini rusak memalukan dan membuat TypeScript secara keseluruhan terlihat buruk

Tolong tolong perbaiki masalah ini. Keluarkan tipe asli ASAP. Ini membuat apa yang merupakan proyek pengetikan yang sangat baik hampir tidak dapat digunakan.

Menyelami kode sebenarnya dari repo ini, Anda dapat dengan jelas melihat bahwa @types/react-native HANYA diperlukan dalam .d.ts aktual dan file uji untuk integrasi React Native. Saya pikir solusi yang lebih tepat adalah untuk apa pun yang terkait dengan React Native untuk dipecah menjadi submodule/opsional/ketergantungan rekan itu sendiri, konsisten dengan perilaku bagaimana styled-components benar-benar bekerja, Anda mengimpor styled-components/native jika Anda menginginkan barang React Native. Anda tidak mengimpor styled-components dan mendapatkan seluruh jungle barang React Native juga pada saat runtime, jadi dengan mengimpor styled-components saya seharusnya juga tidak mendapatkan seluruh jungle @types/react-native jenis.

👍

Saya pikir untuk sementara integrasi reaksi-asli harus dihapus dari versi NPM yang diterbitkan dari paket ini, dan diterbitkan sebagai paketnya sendiri.

Saya pikir itu bisa menjadi solusi, meskipun juga bertanya-tanya apakah mungkin ada cara untuk mengirimkan keduanya dalam paket yang sama, seperti dorongan #32843, tanpa menyebabkan masalah ini.

Hanya catatan ramah untuk mengatakan bahwa cara terbaik untuk memperbaikinya adalah dengan menggali dan membuka PR dengan solusi, atau menemukan seseorang yang secara khusus berinvestasi dalam Komponen Gaya yang dapat memperbaikinya.

PastiTyped menyediakan layanan yang luar biasa untuk komunitas paket dan ada pengelola di sini, meskipun tugas mereka bukan untuk memelihara semua jenis. Mengepalkan tangan Anda di proyek ini (atau di TypeScript) tidak akan membantu.

Saya beralih ke emosi
Mereka menyertakan definisi TypeScript mereka sendiri, dan memiliki antarmuka yang sama persis sehingga migrasi mudah ditemukan dan diganti semuanya.
Plus ukuran bundel sedikit lebih kecil.

Bagaimana kalau kita kembalikan saja perubahan yang diperkenalkan di #32843, karena itu merusak pengetikan untuk >90% pengguna dan memaksa mereka untuk menggunakan versi usang atau beberapa peretasan yang disebutkan di utas ini.

Bagaimana kalau kita kembalikan saja perubahan yang diperkenalkan di #32843, karena itu merusak pengetikan untuk >90% pengguna dan memaksa mereka untuk menggunakan versi usang atau beberapa peretasan yang disebutkan di utas ini.

Itu bisa menjadi solusi yang masuk akal jika itu membuat pengetikan bekerja lebih baik untuk sebagian besar pengguna. Saya tidak tahu pasti apakah PR akan disetujui atau tidak, tetapi jika Anda merasa itu solusi terbaik, jangan ragu untuk membuat PR.

Saya pikir jika pengembalian ini harus dilakukan, itu akan menambahkan beberapa catatan ke paket tentang cara membuatnya bekerja dengan reaksi asli sesudahnya. Saya belum mencobanya, tetapi mungkin pengguna asli-reaksi dapat menyalin dan menempelkan pengetikan yang dihapus ke proyek mereka dengan deklarasi declare module dan membuat semuanya terus berfungsi. Meskipun jelas memalukan harus membuat pengguna asli bereaksi melakukan ini.

Meskipun tbh, saya akan senang jika tim TypeScript dapat memberikan panduan resmi tentang cara menangani masalah seperti ini, karena sepertinya seseorang akhirnya "kalah" dalam semua solusi.

IMO, ini harus dikembalikan - terutama karena ekosistem komponen bergaya web lebih besar.

Saya tidak tahu semua detail tentang cara kerjanya lagi, tetapi dulu untuk React Native Anda akan mendapatkan serangkaian tipe yang berbeda dengan menggunakan jalur berbeda yang sepertinya merupakan kompromi yang baik bagi saya. Hm, sepertinya ini yang membawa. yang kembali ke dalamnya.

Saya ingin tahu apakah mungkin ada cara untuk memiliki modul ambient yang diimpor orang melalui impor tiga garis miring yang menambahkan tipe spesifik asli reaksi?

+1 di sini, tetapi tidak hanya mengeluh, jika ada rencana tindakan saya ingin berpartisipasi dan membantu menyelesaikan masalah ini.

Saya datang ke sini, pergi untuk menambahkan plus satu saya ke beberapa komentar. Menyadari bahwa saya telah melakukannya... terakhir kali saya mengalami masalah ini.

Dan itulah mengapa saya memohon kepada pengelola perpustakaan lain untuk tetap mempertahankan tipe mereka. Ini memaksa perpustakaan untuk memperbarui sesuai dengan tipenya. Saya suka bahwa def typed telah membantu komunitas dalam banyak hal, tetapi ketika pengelola lib memiliki kemampuan untuk mengetiknya sendiri (atau bahkan menulis ulang dalam ts), itu membuat dunia menjadi lebih aman.

Saya juga tetap tenang dan tenang tentang masalah ini karena saya dapat mengatasi masalah ini melalui klon lokal tetapi saya pikir orang-orang di seluruh dunia telah cukup menderita dari masalah ini (lebih dari 6 bulan). Saya ingin masalah kritis dan melumpuhkan ini diperbaiki, dan memungkinkan pengguna TypeScript yang tidak paham teknologi untuk melompat kembali.

Apakah ada PR yang menunggu persetujuan? Haruskah saya meletakkan satu baris perubahan kode yang menghapus ketergantungan global react-native yang tidak valid (Seperti yang saya lakukan di dalam repo npm pribadi saya)?

Juga, apakah ada alasan bahwa react-native harus diinstal dan bertentangan dengan ruang nama global? Silakan bergabung dan bagikan pemikiran Anda. (Tapi saya bertanya-tanya apakah orang-orang yang secara tidak sengaja merusak pekerjaan kami akan pernah membaca masalah ini, karena mereka akan bahagia karena mereka seharusnya tidak tahu tentang kerusakan kami. Saya tidak bisa mengatakan bahwa saya tidak pernah berada di ujung lain dari kasus seperti itu. sebelum.)

Selain itu, bagaimana paket lain menangani masalah seperti ini? Saya tidak tahu tentang itu jadi agak ragu untuk membuat _"sederhana"_ PR yang mengembalikan masalah ini.

Meskipun saya pikir perubahan ini harus dikembalikan, kami tidak perlu mengaktifkan skipLibCheck untuk membuatnya berfungsi: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/33311#issuecomment -466731156 . Tolong jangan.

Saya tidak berpikir bahwa mengembalikan perubahan ini adalah pilihan yang baik. Banyak orang membutuhkan pengetikan untuk reaksi-asli dan kami harus memperbaiki hal yang menyebabkan kesalahan dan tidak menghapus semua pengetikan asli-reaksi.

Dan jika tidak ada solusi saat ini? Kami setidaknya harus menyediakan satu rilis untuk pengguna non-pribumi karena saat ini benar-benar rusak dan telah lama, dan saya berani menebak bahwa pengguna non-pribumi juga mayoritas.

ada pembaruan tentang ini?

@dawick orang yang perlu mengetik react-native dapat menginstalnya secara manual.
Mengapa mereka membutuhkan sama sekali?

Saya tidak berpikir bahwa mengembalikan perubahan ini adalah pilihan yang baik. Banyak orang membutuhkan pengetikan untuk reaksi-asli dan kami harus memperbaiki hal yang menyebabkan kesalahan dan tidak menghapus semua pengetikan asli-reaksi.

Orang yang membutuhkan pengetikan untuk react-native harus mendapatkannya dengan menginstal @types/react-native .

Saya masih sangat yakin bahwa segala sesuatu yang berhubungan dengan react-native harus dihapus dari @types/styled-components dan dipindahkan ke paket/jalur yang berbeda misalnya @types/styled-components/native agar konsisten dengan cara orang sebenarnya gunakan styled-components ; orang yang menginginkan dukungan react-native secara eksplisit mendapatkannya dengan menggunakan import styled from 'styled-components/native' , Anda tidak mendapatkan keseluruhan dari semua react-native jungle dengan melakukan import styled from 'styled-components' di web project, jadi paket @types/ seharusnya tidak berperilaku berbeda

Saya mencoba memperbaiki ini dengan cara yang lebih sistemik selama akhir pekan, yang dapat bekerja untuk repo apa pun yang membungkus jenis untuk kedua web + reaksi asli. https://github.com/microsoft/types-publisher/pull/655

bagaimana ini tidak ditanggapi...

Dengan serius? Masih tidak ada perbaikan?

@givethemheller @sanex3339 ada perbaikan dalam karya dan diskusi di https://github.com/microsoft/types-publisher/pull/655

Sebagai solusi sementara, hapus saja @types/react-native dari node_modules:
rm -rf node_modules/@types/react-native
dan tambahkan ke .yarnclean
@types/react-native

Dengan dirilisnya TypeScript 3.7, kita sekarang berada dalam situasi di mana pengguna 3.7 _dipaksa_ untuk meningkatkan definisi tipe mereka, karena v4.1.8 yang sebelumnya berfungsi sekarang tidak kompatibel dengan TS 3.7, tetapi satu-satunya versi yang kompatibel dengan TS 3.7 benar-benar rusak untuk setiap pengembang React-web (yang tentunya merupakan mayoritas yang sangat besar). 😕

Solusi .yarnclean mungkin cukup bagi mereka yang menggunakan Benang, yang mencakup kurang dari semua orang. Dan memodifikasi compilerOptions sama sekali bukan solusi jangka panjang yang terukur.

Saya tidak tahu apa solusi terbaik di sini. Sebagai pengganti sementara, saya pasti mendukung penerbitan versi terpisah yang secara khusus mengecualikan hal-hal react-native .

Sebagai pengguna non-benang, Anda dapat mengatasinya dengan menambahkan ini ke skrip npm Anda:

    "postinstall": "rm -rf node_modules/@types/react-native"

Akan menyebabkan NPM menghapus tipe asli segera setelah menginstalnya. Masih merupakan solusi peretasan untuk apa yang seharusnya tidak menjadi masalah tetapi berhasil.

Menambahkan diri saya di sini juga. Kami membutuhkan solusi, lebih baik daripada mengedit banyak skrip pascainstal ...

Masalah ini pada dasarnya berdampak pada semua pengguna TypeScript dari komponen gaya selama lebih dari satu tahun (!!!).
Apakah kami memiliki solusi resmi untuk ini (tidak termasuk peretasan dengan .yarnclean)? Apakah ada pemblokir?

Saya merasa ingin membagi ini menjadi dua paket (atau berpotensi tiga, satu basis dengan hal-hal umum untuk reaksi asli dan reaksi, satu untuk reaksi dan satu lagi untuk RN, dan membuat dua yang terakhir menggunakan yang pertama dengan hal-hal umum) akan menjadi cara termudah dan tercepat untuk mengatasinya.

Saya lebih dari bersedia untuk membantu, jika kita hanya kekurangan kontributor, saya hanya ingin lebih mudah untuk menggunakan komponen gaya dan naskah bersama-sama, tanpa harus meretas hal-hal di sekitar

Saya hanya ingin lebih mudah menggunakan komponen gaya dan naskah bersama-sama, tanpa harus meretas hal-hal di sekitar

Menabrak! Harus ada implementasi definisi tipe yang lebih baik ...

Saya menghapus @types/react-native dari node_modules saya dan masih mendapatkan kesalahan yang sama. Mengapa bahkan dengan hack?

@ArnaudJeannin jika Anda menghapusnya secara manual dengan tangan, itu akan ditambahkan kembali setiap kali Anda menjalankan npm i / yarn

Untuk membuat penghapusan terus-menerus melalui pemasangan baik menghapusnya melalui NPM postinstall sesuai komentar saya sebelumnya atau menambahkannya ke .yarnclean jika Anda menggunakan Benang harus berfungsi dengan baik.

Apa yang saya lakukan tidak akan sesuai untuk semua orang, tetapi saya "menyelesaikan" masalah ini dengan beralih dari komponen gaya ke emosi . Penggunaan kedua perpustakaan saya cukup mendasar-- hanya membungkus komponen dengan CSS dan mewarisi gaya-- tetapi saya menemukan Emotion memiliki API yang mirip dengan komponen gaya untuk fitur yang saya butuhkan. Itu adalah transisi yang mudah. Saya belum mengalami masalah yang signifikan sejauh ini setelah 6 bulan. Emosi menyertakan pengetikan TS bawaan sehingga tidak ada masalah yang tidak sinkron dengan @types .

Seperti disebutkan di atas, beralih pustaka CSS tidak akan sesuai untuk banyak proyek, tetapi bagi saya beralih lebih mudah daripada bertengkar dengan masalah TS komponen gaya. YMMV.

Solusi yang lebih sederhana untuk pengguna yarn , yang memungkinkan Anda menggunakan komponen gaya versi saat ini. Dalam package.json:

  "resolutions": {
    "@types/react-native": "link:./empty-package"
  },

Siapkan paket do-nothing yang menjadi target resolusi di atas:

mkdir empty-package
cd empty-pacakge
yarn init -y
touch index.d.ts

Bekerja untuk saya.

@arimah @GabrielDuarteM , dapatkah Anda menjelaskan downvote Anda? Apakah Anda mencoba ini, dan ternyata tidak berhasil? Tolong beri komentar agar saya dapat membantu dan agar orang lain dapat mengambil manfaat jika demikian. Ini tampaknya jauh lebih tidak invasif daripada satu-satunya solusi lain yang tersedia saat ini (skrip postinstall untuk menghapus modul tipe). Atau jika ada beberapa negatif kuat untuk solusi ini yang belum saya sadari, saya ingin merevisi atau menghapus komentar.

@jamietre Saya percaya downvotes adalah bahwa sementara ini mungkin berhasil, ini bukan solusi yang benar dan tidak mengubah fakta bahwa jenisnya perlu dipisah (atau mungkin dependensi rekan) untuk reaksi-asli

@jamietre Saya percaya downvotes adalah bahwa sementara ini mungkin berhasil, ini bukan solusi yang benar dan tidak mengubah fakta bahwa jenisnya perlu dipisah (atau mungkin dependensi rekan) untuk reaksi-asli

Tidak menyadari bahwa solusi tidak disukai. Saya selalu menemukan mereka sangat membantu sambil menunggu perbaikan nyata. Ini telah menjadi masalah selama lebih dari setahun. dan pekerjaan masih harus diselesaikan. 🤷♂

@jamietre Saya pikir itu hanya karena Anda membingkainya sebagai "solusi", yang sebenarnya tidak, dan membingkainya seperti itu mungkin memberi pengelola gagasan bahwa ini masih bukan masalah konyol yang memengaruhi sebagian besar pengguna mereka.

@jamietre Saya pikir itu hanya karena Anda membingkainya sebagai "solusi", yang sebenarnya tidak, dan membingkainya seperti itu mungkin memberi pengelola gagasan bahwa ini masih bukan masalah konyol yang memengaruhi sebagian besar pengguna mereka.

Mengubah "solusi" menjadi "solusi"... sungguh, saya hanya mencoba membantu orang agar dapat menggunakan komponen gaya dengan skrip. Downvotes menyiratkan itu tidak berfungsi. Tampaknya tidak membantu untuk berdalih tentang semantik tapi pasti.

Di Appsome Solutions kami memiliki masalah yang sama dan kami mengatasinya dengan aturan "skipLibCheck": true, dalam file tsconfig.json.

@pumanitro Seperti banyak hal lain yang disarankan, sayangnya itu bukan solusi tetapi solusi belaka.

@SamHH Mengubah kata yang dipecahkan menjadi solusi.
Beginilah cara melakukannya di CRA dengan TypeScript, tetapi Anda benar itu bukan solusi. Namun, itu bisa membantu orang.

Memposting ulang komentar saya dari https://github.com/DefinitelyTyped/DefinitelyTyped/pull/32843#issuecomment -605921101

Solusinya adalah memiliki array compilerOptions.types di tsconfig.json yang menghentikan TypeScript dari secara otomatis membaca setiap paket @types/* saat typechecking. TypeScript hanya akan secara otomatis mengimpor jenis paket yang disebutkan dalam array types ; misalnya, "types": ["node"] (jika Anda menggunakan modul bawaan seperti buffer atau path , untuk memuat @types/node ), "types": ["node", "jest"] (jika Anda juga menulis tes lelucon); atau bahkan hanya "types": [] untuk mencegah TypeScript memuat otomatis paket apa pun yang tidak langsung diimpor atau /// <reference types="..." /> dari kode Anda.

Saya tidak bisa mengatakan apakah memiliki @types/styled-components-native akan lebih baik; itu akan menjadi tidak biasa setidaknya, dan mungkin menghapus kebutuhan untuk compilerOptions.types "solusi", tetapi IMO mengatur compilerOptions.types hanya untuk paket yang jenisnya Anda perlu dimuat secara otomatis (tanpa import s) adalah praktik terbaik.


Singkatnya, masalahnya adalah TypeScript secara otomatis memuat tipe @types/react-native , meskipun Anda tidak secara langsung atau tidak langsung merujuknya sama sekali, karena perilaku default adalah memuat semua paket @types/* . Pengaturan compilerOptions.types mencegah default itu dan hanya memuat paket-paket yang Anda daftarkan + paket-paket yang Anda import .

Saya tidak percaya ini masih menjadi masalah! Mengalami masalah ini musim panas lalu, saya baru saja memperbarui paket karena saya berasumsi ini akan diperbaiki sejak saat itu

siapa pengelola @types/styled-components ? karena kita membutuhkan seseorang yang baru

Proposal @Jessidhia dengan compilerOptions.types berhasil untuk saya. Terima kasih banyak! Saya juga melihat ini sebagai praktik terbaik. Sampai saat ini saya tidak mengalami kekurangan. Aku bisa membayangkan bahwa itu lebih cepat, juga.

@sbusch kerugiannya adalah jika Anda menggunakan compilerOptions.types semua pengetikan Anda perlu dicantumkan di sini, karena apa pun yang tidak termasuk dalam daftar ini akan dikecualikan. Jadi, untuk paket yang diinstal yang menyediakan pengetikan, Anda harus mengelola konfigurasi ini secara manual

Ya, Mendaftar semua tipe dalam tipe bukanlah pilihan.

Jika Anda mengimpor sesuatu dari modul, Anda masih mendapatkan pengetikan TypeScript. Opsi types adalah untuk jenis impor otomatis untuk deklarasi global. Ini tidak terlalu sering diperlukan, jadi seharusnya tidak terlalu buruk untuk menambahkan modul tersebut secara manual ke types . Begitulah cara saya memahaminya. Basis kode TS kami yang cukup besar dengan pengaturan TS yang sangat ketat masih berfungsi setelah menyetel array types ke [] .

Lihat misalnya https://stackoverflow.com/a/59030291

kerugiannya adalah jika Anda menggunakan compilerOptions.types semua pengetikan Anda perlu dicantumkan di sini, karena apa pun yang tidak termasuk dalam daftar ini akan dikecualikan. Jadi, untuk paket yang diinstal yang menyediakan pengetikan, Anda harus mengelola konfigurasi ini secara manual

Seperti yang dikatakan @sbush , ini tidak benar. Opsi itu hanya untuk tipe global, pengetikan import ed libs akan digunakan tanpa masalah. Usulan @Jessidhia tidak berbahaya.

Saya tidak berpikir satu paket harus memaksa konsumen untuk melanggar konvensi yang meninggalkan bidang itu sendirian. Seperti yang lainnya, itu bukan solusi tetapi solusi.

Tidak yakin apakah seseorang sudah menjawab kasus ketika Anda memiliki mono repo Lerna + yarn workspaces (terlalu banyak jawaban). Untuk kasus ini, Anda dapat menggunakan properti no-hoist info lebih lanjut di situs web yarn

dalam praktik di file package.json :

"workspaces": {
  "packages": ["packages/*"],
  "nohoist": ["**/react-native", "**/react-native/**"]
}

🙏🏻 @types/styled-components": "4.1.8" 🙏🏻

Solusi yang diusulkan @nahumzs berfungsi jika Anda menggunakan benang monorepos. Dalam hal ini, kami menjaga reaksi asli agar tidak mencemari folder node_packages global, mencegah duplikat yang pada gilirannya menimbulkan kesalahan.

Pada titik apa kami hanya mengatakan bahwa ada lebih banyak pengguna React Web daripada pengguna React Native, dan menghapus dukungan React Native?

Apakah ada kemajuan dalam masalah ini? Saat ini kami menggunakan @types/styled-components versi 4.1.8 karena kami tidak dapat memperbarui tanpa resolusi atau menggunakan solusi, seperti menghapus node_modules/@types/react-native dalam perintah npm post install.

Oh f**k, masalah ini membuatku sangat kesakitan.

Sekarang saya mengalami masalah yang dijelaskan di sini . Jadi, jika saya memutakhirkan ke TypeScript yang lebih baru, saya bahkan tidak dapat menggunakan @types/[email protected] . WTH.

Bagaimanapun, ini tampaknya merupakan duplikat dari https://github.com/DefinitelyTyped/DefinitelyTyped/issues/33015 .

Di Appsome Solutions kami memiliki masalah yang sama dan kami mengatasinya dengan aturan "skipLibCheck": true, dalam file tsconfig.json.

Jika ada yang merasakan hal yang sama: Saya tidak ingin mengaktifkan skipLibCheck hanya untuk mengatasi masalah ini. Tetapi saya berubah pikiran sekarang bahwa perubahan baru -

mungkin seseorang baik-baik saja dengan peretasan yang sangat kotor, Anda bisa menambahkan ke bagian skrip package.json :

"postinstall": "rm -rf node_modules/@types/react-native"

Bukan solusi yang bagus, tetapi ini seharusnya berhasil.

OMG, masalah ini masih aktual bahkan untuk 5.1.1

1- Tambahkan .yarnclean di root proyek.
2- Masukkan konten berikut: @types/react-native .

Ini diselesaikan di sini setidaknya sementara saya menunggu solusi resmi.

Ini sudah berlangsung selama lebih dari 1,5 tahun, sekarang. Bagaimanapun, saya pikir masalah saya terkait dan saya mendapatkan lebih banyak kesalahan "Pengidentifikasi duplikat". 36 seluruhnya.

tsconfig.json

{
  "compilerOptions": {
    "allowJs": true,
    "baseUrl": ".",
    "esModuleInterop": true,
    "isolatedModules": true,
    "jsx": "react",
    "module": "CommonJS",
    "moduleResolution": "Node",
    "noEmit": true,
    "sourceMap": true,
    "target": "ES6"
  },
  "include": [
    "src/**/*"
  ],
}

Hasil kompilasi dengan tsc :

Jumlah: 38 kesalahan. Hanya 2 dari mereka yang berasal dari file src/**.* sumber proyek saya yang sebenarnya. 36 kesalahan lainnya berasal dari konflik .d.ts disebabkan oleh @types/styled-components .

Catatan: Jika saya menambahkan flag "skipLibCheck": true , kesalahan akan hilang. Juga jika saya menghapus @types/styled-components , kesalahannya juga hilang.

Saya tidak akan memposting log lengkap di sini, tetapi berikut adalah beberapa contohnya.

error TS2300: Duplicate identifier 'AbortController'.
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:1939:11
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:1950:13 
node_modules/@types/react-native/globals.d.ts:363:15

error TS2300: Duplicate identifier 'AbortSignal'. 
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:1960:11 
node_modules/@types/react-native/globals.d.ts:350:15
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:1972:13

error TS2300: Duplicate identifier 'FormData'. 
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:5548:11
node_modules/@types/react-native/globals.d.ts:40:15
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:5558:13

error TS2300: Duplicate identifier 'URL'.
error TS2300: Duplicate identifier 'URLSearchParams'.
error TS2300: Duplicate identifier 'RequestInfo'.
error TS2300: Duplicate identifier 'XMLHttpRequestResponseType'.

error TS2717: Subsequent property declarations must have the same type.  Property 'body' 
must be of type 'string | ArrayBuffer | ArrayBufferView | Blob | FormData | URLSearchParams | ReadableStream<Uint8Array> | null | undefined', 
but here has type 'string | ArrayBuffer | DataView | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | ... 8 more ... | undefined'. 

error TS2717: Subsequent property declarations must have the same type.  Property 'signal' must be of type 'AbortSignal | null | undefined', but here has type 'AbortSignal | undefined'.

error TS2300: Duplicate identifier 'RequestInfo'.

Solusi yang saya adopsi saat ini adalah menghapus @types/styled-components dan melanjutkan proyek saya (yang merupakan aplikasi web React).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat