Material-ui: "TS2554: Mengharapkan 1 argumen, tetapi mendapat 0." di hook dikembalikan oleh makeStyles

Dibuat pada 28 Des 2018  ·  22Komentar  ·  Sumber: mui-org/material-ui

  • [x] Ini bukan masalah v0.x.
  • [x] Saya telah mencari masalah dari repositori ini dan yakin bahwa ini bukan duplikat.

Perilaku yang Diharapkan 🤔

TypeScript seharusnya tidak menunjukkan kesalahan saat melakukan:

Di luar komponen:
const useStyles = makeStyles(styles);

Di dalam komponen:
const {/* stuff */} = useStyles();

Perilaku Saat Ini 😯

Panggilan fungsi useStyles(); digarisbawahi, dan WebStorm mengatakan "TS2554: Mengharapkan 1 argumen, tetapi mendapat 0." di atasnya.

| Teknologi | Versi |
| -------------- | --------- |
| @ material-ui / styles | 3.0.0-alpha.4 |
| Bereaksi | 16.7.0-alpha.2 |
| TypeScript | 3.1.1 |

bug 🐛 styles typescript

Komentar yang paling membantu

@krazyjakee coba const c = useStyles({});

Semua 22 komentar

Harap sertakan deklarasi styles dan tsconfig.json . Apakah kesalahan muncul saat menjalankan tsc ? Menanyakan ini karena integrasi IDE cenderung menggunakan versi skrip yang berbeda.

Nitpick tidak terkait: Lebih suka string versi yang telah diselesaikan react@next berubah seiring waktu. Anda mungkin bermaksud [email protected] ?

Saya sendiri tidak menjalankan tsc , saya menggunakan IDE untuk mentranspilasi .ts/x menjadi .js/x secara langsung (di tempat) setiap kali saya mengubah file TypeScript.

Versi yang dibundel dengan WebStorm yang saya gunakan adalah 3.1.1 .

Memperbarui OP untuk mencerminkan versi React yang saya gunakan: 16.7.0-alpha.2

styles variabel adalah:

const styles = {
    chart: {
        width: '100%',
        height: 70,
        backgroundColor: '#f9f9f9'
    },
}

(Saya mendapatkan pesan yang sama ketika styles didefinisikan sebagai fungsi ( theme => { /* definitions */ } ).

tsconfig.json :

{
  "compilerOptions": {
    "sourceMap": false,
    "target": "ES2017",
    "module": "ES6",
    "jsx": "react",
    "moduleResolution": "Node",
    "strictPropertyInitialization": true,
    "strictNullChecks": true,
    "noImplicitAny": true
  }
}

(Saya mendapatkan pesan yang sama ketika styles didefinisikan sebagai fungsi ( theme => { /* definitions */ } ).

Kemudian penyiapan Anda juga bermasalah. Kami menguji penggunaan panggilan balik dan itu berfungsi dengan baik. Namun ia memiliki bug yang dapat direproduksi saat menggunakan objek gaya statis.

Masalahnya kembali dengan kombinasi [email protected] (config config incremental: true) dan @material-ui/[email protected] . Namun itu berhasil dengan [email protected]

@TeoTN Terima kasih atas laporannya. Saya rasa saya tahu mengapa ini terjadi.

@TeoTN Bisakah Anda memasukkan kode yang menyebabkan masalah. Saya tidak bisa mereproduksinya.

@ eps1lon berikut adalah repo yang mereproduksi bug: TeoTN / mui-ts-bug

Saya juga menemukan kesalahan tiket ini dengan [email protected] dan @material-ui/[email protected] .
Alasan saya untuk mengupgrade dari [email protected] adalah karena VS Code sangat lambat dengan penyelesaian otomatis dan tooltips.

Saat menurunkan versi ke [email protected] ada kesalahan baru sekitar makeStyles suka

      Types of property 'main' are incompatible.
        Type '{ position: string; top: number; left: number; bottom: number; right: number; }' is not assignable to type 'CSSProperties | ((props: {}) => CSSProperties)'.
          Type '{ position: string; top: number; left: number; bottom: number; right: number; }' is not assignable to type 'CSSProperties'.
            Types of property 'position' are incompatible.
              Type 'string' is not assignable to type 'PositionProperty'.  TS2345

     9 | }));
    10 | 
  > 11 | const useStyles = makeStyles((theme: Theme) => ({
       |                              ^
    12 |   main: {
    13 |     position: 'absolute',
    14 |     top: 0,

Saya dapat memperbaiki ini dalam kombinasi dengan createStyles seperti:

const useStyles = makeStyles((theme: Theme) =>
  createStyles({
    main: {
      position: 'absolute',
      top: 0,

Mungkin yang layak disebutkan adalah bahwa hanya import { createStyles } from '@material-ui/styles'; berfungsi sedangkan createStyles dari @material-ui/core tidak karena jenis pengetikannya berbeda.

Menggunakan createStyles tidak perlu dengan [email protected] dan [email protected] .

Karena masalah ini hanya terjadi di kandidat rilis skrip ketikan, saya akan menutup ini. Kami tidak dapat mendukung versi dependensi kami yang tidak stabil. Ajukan masalah baru jika kesalahan ini muncul kembali di versi Stkrip Ketik yang stabil.

Tampaknya benar untuk skrip ketikan 3.5.1, yang merupakan versi stabil terbaru untuk saat ini (bersama dengan materi-ui 4)

Dengan versi 4.0.2 dan ts 3.5.1 saya dapat memicu kesalahan ini dengan menambahkan "strictNullChecks": false ke tsconfig.json saya.

Dengan versi 4.0.2 dan ts 3.5.1 saya dapat memicu kesalahan ini dengan menambahkan "strictNullChecks": false ke tsconfig.json saya.

Ini tidak didukung oleh pengetikan kami:

Definisi kami diuji dengan tsconfig.json berikut. Menggunakan tsconfig.json yang tidak terlalu ketat atau menghilangkan beberapa pustaka dapat menyebabkan kesalahan.

- https://material-ui.com/guides/typescript/

Setiap paket yang diterbitkan di bawah types/ tidak diuji dengan "strictNullChecks": false juga artinya secara virtual tidak ada paket yang mendukung konfigurasi ini.

Aku terkejut. Saya telah mewarisi proyek dengan strict: false dan tidak pernah menghasilkan lebih banyak error sebelumnya.

Karena v3.x berfungsi, saya berasumsi bahwa 4.x juga akan berfungsi.

Bagaimanapun, catatan itu mungkin membantu orang lain yang melaporkan masalah ini, tentu saja itu adalah biaya yang tidak terduga untuk peningkatan.

Sejauh yang saya ingat, ada masalah lain di 3.x. Anda juga tidak menemukannya atau sudah memiliki tipe yang tidak sehat. Persyaratan ini tidak diperkenalkan dengan 4.x.

Saya yakin ada dan saya beruntung.

Tetapi, jika saya mengambil contoh proyek yang dapat dikompilasi dengan strict: true , saya tidak berharap untuk mencapai masalah ini hanya dengan membaliknya menjadi strict: false . Saya tidak melihat bagaimana tipe yang tidak sehat akan ada hubungannya dengan situasi itu.

Saya tidak melihat bagaimana tipe yang tidak sehat akan ada hubungannya dengan situasi itu.

Ada hubungannya dengan jenis utilitas yang melanggar strictNullChecks: false . Tanpa tanda itu undefined | null dapat diberikan ke any . Itu adalah detail implementasi.

Masalah ini perlu dibuka kembali!

Bagaimana cara mengatasi masalah ini untuk saat ini? Jika saya memberikan null, makeStyles melempar kesalahan 'tidak dapat menemukan kelas yang tidak ditentukan'. Terkadang saya tidak memiliki alat peraga untuk dilalui, jadi apa yang harus saya lewati?

@krazyjakee coba const c = useStyles({});

@krazyjakee coba const c = useStyles({});

Terima kasih ini berhasil!

Saya menemukan kesalahan ini dengan skrip ketikan 3.7.5.
const c = useStyles({}); berfungsi,
tetapi tidak sesuai dengan dokumen:
https://material-ui.com/zh/styles/basics/

FWIW, melihat hal yang sama. Saya sudah mencoba saran yang diposting di sini (https://github.com/mui-org/material-ui/issues/16867) dengan strict dan strictNullChecks , tetapi masih belum ada dadu. Apakah const c = useStyles({}); "jalan" sekarang?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat