typescript - Bagaimana cara memperbaiki "Expression produces a union type that is too complex to represent. ts(2590)"?
Saya mencoba menggunakan Button dari @chakra-ui/react npm library tetapi elemen Button menghasilkan kesalahan ini:
TypeScript: Ekspresi menghasilkan tipe gabungan yang terlalu kompleks untuk direpresentasikan. ts(2590) Contoh:
import {Button} from "@chakra-ui/react"
function Page() {
return <Button onClick={(event) => {}}>Text</Button>
}
Jawaban #1
Ekstensi Typescript VSCode
Pastikan Anda menggunakan versi TypeScript yang benar. Ekstensi TypeScript dapat menggunakan versinya sendiri alih-alih menggunakan versi TypeScript proyek Anda yang disetel di package.json
Solusi
Solusi GUI
- Buka file JavaScript atau TypeScript di VS Code.
- Di palet perintah VS Code (F1 atau Ctrl+P adalah pintasan default), jalankan perintah TypeScript: Pilih versi TypeScript.
- Pastikan Anda telah memilih
Gunakan versi workspace
Jika tidak ada opsi Use workspace version, pastikan Anda memiliki typescript di dependencies Anda di package.json dan Anda telah menginstal dependencies Anda menggunakan npm install atau npm clean-install
Jika Anda masih tidak memilikinya - tambahkan typescript.enablePromptUseWorkspaceTsdk: true ke .vscode/settings.json atau temukan pengaturan Enable Prompt Use Workspace Tsdk dan aktifkan
Solusi JSON
Perbarui konfigurasi vscode Anda di ./.vscode/settings.json (buat jika Anda belum memilikinya)
{
"typescript.enablePromptUseWorkspaceTsdk": true,
"typescript.tsdk": "node_modules/typescript/lib"
}
Rekomendasi
Atur ekstensi typescript untuk menanyakan apakah ingin menggunakan versi workspace
Temukan pengaturan 'Typescript: Enable Prompt Use Workspace Tsdk' di pengaturan VsCode dan aktifkan
Pada saat berikutnya Anda membuka ruang kerja Anda di VsCode, Anda akan melihat notifikasi ini: Anda ingin mengklik "Izinkan" :)
Solusi Lain yang Mungkin
- Perbarui versi npm
Jika Anda menggunakan nvm -nvm install --latest-npm - Perbarui versi nodejs
Jika Anda tidak dapat memperbarui nodejs ke versi terbaru saat ini, Anda dapat memperbaruinya setidaknya ke versi minor+path terbaru (x.latest.latest) agar tidak ada perubahan yang merusak - Hapus
node_modulesdannpm install - jika Anda memiliki proyek yang dipisahkan berdasarkan folder dan berada di dalamnya, Anda tidak dapat memilih versi typescript di vscode. Dalam hal ini, buka vscode baru dan pergi langsung ke folder Anda yang berisi package.json. (https://stackoverflow.com/users/5246617/pavol-travnik)
Jawaban #2
Saya juga mengalami masalah yang sama saat menggunakan komponen chakra-ui di next js 13.
Versi next js 13 datang dengan versi typescript 5.0.2. Saya telah mengubah versi typescript menjadi 4.9.5 pada file package.json dan menginstal ulang paket npm setelah menghapus file package-lock.json. Masalah ini teratasi dan saya menguji dengan perintah compiler typescript
npx tsc --noEmit
Jawaban #3
Saya percaya masalah ini terkait dengan pengaturan lingkungan NX. Saya kira Anda telah memilih opsi "emotion" saat menyiapkan aplikasi NX (saya juga melakukan hal yang sama).
Saya dapat mengonfirmasi bahwa masalah telah diselesaikan dengan menghapus "jsxImportSource": "@emotion/react" dari tsconfig.json. Tidak diperlukan langkah tambahan.
Menggunakan "typescript": "5.0.4" dan "@chakra-ui/react": "2.6.0". Semua baik.
Edit: Jika Anda menggunakan Emotion.js dalam kode Anda, Anda tetap harus menghapus jsxImportSource dari file tsconfig.json, tetapi tambahkan tipenya langsung:
{
"compilerOptions": {
...,
"types": ["@emotion/react/types/css-prop"]
}
}
Anda mungkin perlu menghapus cache (menghapus node-modules, yarn.lock, direktori build ...) agar perubahan berlaku.
Jawaban #4
mengubah versi typescript menjadi "typescript": "^4.9.5" di package.json dan menjalankan yarn/npm install membantu saya menyelesaikan masalah tersebut.
Jawaban #5
Pergi ke bilah bawah di VSCode dan pilih versi TS yang sesuai dengan package.json Anda :
vs kode
Akan lebih baik jika versi TS yang digunakan oleh vscode lebih tinggi daripada versi namespace saat ini (di proyek Anda)

