Material-ui: "TS2554: 1 Argumente erwartet, aber 0 erhalten." am Haken von makeStyles zurückgegeben

Erstellt am 28. Dez. 2018  ·  22Kommentare  ·  Quelle: mui-org/material-ui

  • [x] Dies ist kein v0.x-Problem.
  • [x] Ich habe die Probleme dieses Repositorys durchsucht und glaube, dass dies kein Duplikat ist.

Erwartetes Verhalten 🤔

TypeScript sollte dabei keinen Fehler anzeigen:

Außerhalb der Komponente:
const useStyles = makeStyles(styles);

Innerhalb der Komponente:
const {/* stuff */} = useStyles();

Aktuelles Verhalten 😯

Der Funktionsaufruf useStyles(); ist unterstrichen, und WebStorm sagt "TS2554: 1 Argumente erwartet, aber 0 erhalten." darauf.

| Tech | Version |
| -------------- | --------- |
| @ material-ui / styles | 3.0.0-alpha.4 |
| Reagiere | 16.7.0-alpha.2 |
| TypeScript | 3.1.1 |

bug 🐛 styles typescript

Hilfreichster Kommentar

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

Alle 22 Kommentare

Bitte fügen Sie Ihre styles Erklärung und tsconfig.json . Erscheint der Fehler, wenn tsc ? Fragen Sie dies, weil IDE-Integrationen in der Regel eine andere Typoskriptversion verwenden.

Nicht verwandter Nitpick: Bevorzugen Sie aufgelöste Versionszeichenfolgen react@next Änderungen im Laufe der Zeit. Sie meinten wahrscheinlich [email protected] ?

Ich führe tsc selbst aus, sondern verwende die IDE, um .ts/x in .js/x direkt (an Ort und Stelle) zu transpilieren, wenn ich eine TypeScript-Datei ändere.

Die mit dem von mir verwendeten WebStorm gebündelte Version ist 3.1.1 .

Das OP wurde aktualisiert, um die von mir verwendete React-Version widerzuspiegeln: 16.7.0-alpha.2

styles Variable ist:

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

(Ich erhalte die gleiche Meldung, wenn styles als Funktion definiert ist ( theme => { /* definitions */ } ).

tsconfig.json :

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

(Ich erhalte die gleiche Meldung, wenn styles als Funktion definiert ist ( theme => { /* definitions */ } ).

Dann hat auch Ihr Setup ein Problem. Wir testen die Rückrufnutzung und das funktioniert einwandfrei. Bei Verwendung eines statischen Stilobjekts tritt jedoch ein reproduzierbarer Fehler auf.

Das Problem ist mit einer Kombination aus [email protected] (inkrementelle Konformitätskonfiguration: true) und @material-ui/[email protected] . Es funktioniert jedoch mit [email protected]

@TeoTN Danke für den Bericht. Ich glaube ich weiß warum das passiert.

@TeoTN Könnten Sie den Code einfügen, der Probleme verursacht

@ eps1lon hier ist ein Repo, das den Fehler reproduziert: TeoTN / mui-ts-bug

Ich bin auch auf den Fehler dieses Tickets mit [email protected] und @material-ui/[email protected] .
Mein Grund für das Upgrade von [email protected] war, dass VS Code mit automatischer Vervollständigung und Tooltips unglaublich langsam war.

Beim Downgrade auf [email protected] gab es neue Fehler um makeStyles like

      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,

Ich konnte dies in Kombination mit createStyles beheben, wie:

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

Erwähnenswert ist vielleicht, dass nur import { createStyles } from '@material-ui/styles'; funktioniert, während createStyles von @material-ui/core nicht funktioniert, da die Typisierungen unterschiedlich sind.

Die Verwendung von createStyles war sowohl für [email protected] als auch für [email protected] nicht erforderlich.

Da dieses Problem nur bei einem Release Candidate von Typoskript auftritt, werde ich dies schließen. Wir können keine instabilen Versionen unserer Abhängigkeiten unterstützen. Bitte reichen Sie ein neues Problem ein, wenn dieser Fehler in einer stabilen Version von Typescript erneut auftritt.

Es scheint aktuell für Typoskript 3.5.1 zu sein, das derzeit die neueste stabile Version ist (zusammen mit Material-UI 4).

Mit der Version 4.0.2 und ts 3.5.1 kann ich diesen Fehler auslösen, indem ich "strictNullChecks": false zu meiner Datei tsconfig.json hinzufüge.

Mit der Version 4.0.2 und ts 3.5.1 kann ich diesen Fehler auslösen, indem ich "strictNullChecks": false zu meiner Datei tsconfig.json hinzufüge.

Dies wird von unseren Eingaben nicht unterstützt:

Unsere Definitionen werden mit der folgenden tsconfig.json getestet. Die Verwendung einer weniger strengen tsconfig.json oder das Weglassen einiger Bibliotheken kann zu Fehlern führen.

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

Jedes unter types/ veröffentlichte Paket wird nicht mit "strictNullChecks": false getestet, was bedeutet, dass praktisch kein Paket diese Konfiguration unterstützt.

Ich bin überrascht. Ich habe Projekte mit strict: false geerbt und noch nie zuvor mehr Fehler generiert.

Da v3.x funktionierte, ging ich davon aus, dass 4.x auch funktionieren würde.

Wie auch immer, dieser Hinweis könnte anderen helfen, die dieses Problem melden. Es sind sicherlich unerwartete Kosten für ein Upgrade.

Soweit ich mich erinnere, gab es in 3.x andere Probleme. Sie sind ihnen entweder nicht begegnet oder hatten bereits unsolide Typen. Diese Anforderung wurde mit 4.x nicht eingeführt.

Ich bin mir sicher, dass es solche gab und ich hatte Glück.

Wenn ich jedoch ein Beispielprojekt nehme, das mit strict: true kompiliert werden kann, erwarte ich nicht, dass dieses Problem einfach durch Umdrehen auf strict: false . Ich sehe nicht ein, wie unsolide Typen etwas mit dieser Situation zu tun haben würden.

Ich sehe nicht ein, wie unsolide Typen etwas mit dieser Situation zu tun haben würden.

Hat mit Dienstprogrammtypen zu tun, die mit strictNullChecks: false brechen. Ohne dieses Flag kann undefined | null any zugewiesen werden. Dies sind jedoch Implementierungsdetails.

Dieses Problem muss erneut geöffnet werden!

Wie komme ich vorerst um dieses Problem herum? Wenn ich null übergebe, löst makeStyles den Fehler "Klassen mit undefiniertem Wert können nicht gefunden werden" aus. Manchmal muss ich keine Requisiten weitergeben. Was gebe ich also weiter?

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

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

Danke das hat funktioniert!

Ich bin auf diesen Fehler mit Typoskript 3.7.5 gestoßen.
Diese const c = useStyles({}); funktioniert,
aber es widerspricht dem doc:
https://material-ui.com/zh/styles/basics/

FWIW, das Gleiche zu sehen. Ich habe die hier veröffentlichten Vorschläge (https://github.com/mui-org/material-ui/issues/16867) mit strict und strictNullChecks ausprobiert, aber immer noch keine Würfel. Ist const c = useStyles({}); jetzt "der Weg"?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

anthony-dandrea picture anthony-dandrea  ·  3Kommentare

chris-hinds picture chris-hinds  ·  3Kommentare

mattmiddlesworth picture mattmiddlesworth  ·  3Kommentare

ghost picture ghost  ·  3Kommentare

FranBran picture FranBran  ·  3Kommentare