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
[x] [Sebutkan](https://github.com/blog/821-mention-somebody-they-re-notified) penulis (lihat Definitions by:
di index.d.ts
) sehingga mereka dapat menanggapi.
Aplikasi reaksi instal baru dengan perintah
yarn create react-app my-app-ts --scripts-version=react-scripts-ts
yarn add styled-components
yarn add -D @types/styled-components
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();
yarn start
Ada banyak kegagalan menurut banyak definisi yang bertentangan dengan lib.dom
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 bagaimanastyled-components
benar-benar bekerja, Anda mengimporstyled-components/native
jika Anda menginginkan barang React Native. Anda tidak mengimporstyled-components
dan mendapatkan seluruh jungle barang React Native juga pada saat runtime, jadi dengan mengimporstyled-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).
Komentar yang paling membantu
Diperbaiki dengan mengatur compilerOptions.types secara manual