TypeScript sollte dabei keinen Fehler anzeigen:
Außerhalb der Komponente:
const useStyles = makeStyles(styles);
Innerhalb der Komponente:
const {/* stuff */} = useStyles();
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 |
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"?
Hilfreichster Kommentar
@krazyjakee versuchen
const c = useStyles({});