TypeScript ne devrait pas afficher d'erreur lors de l'exécution:
En dehors du composant:
const useStyles = makeStyles(styles);
À l'intérieur du composant:
const {/* stuff */} = useStyles();
L'appel de fonction useStyles();
est souligné et WebStorm dit "TS2554: 1 arguments attendus, mais 0." dessus.
| Tech | Version |
| -------------- | --------- |
| @ material-ui / styles | 3.0.0-alpha.4 |
| React | 16.7.0-alpha.2 |
| TypeScript | 3.1.1 |
Veuillez inclure votre déclaration styles
et tsconfig.json
. L'erreur apparaît-elle lors de l'exécution de tsc
? Cette question est posée car les intégrations IDE ont tendance à utiliser une version dactylographiée différente.
Nitpick non lié: Préférez les chaînes de version résolues react@next
changements au fil du temps Vous vouliez probablement dire [email protected]
?
Je n'exécute pas tsc
moi-même, j'utilise l'IDE pour transpiler .ts/x
en .js/x
directement (en place) chaque fois que je change un fichier TypeScript.
La version fournie avec le WebStorm que j'utilise est 3.1.1
.
Mise à jour de l'OP pour refléter la version React que j'utilise: 16.7.0-alpha.2
styles
variable
const styles = {
chart: {
width: '100%',
height: 70,
backgroundColor: '#f9f9f9'
},
}
(J'obtiens le même message lorsque styles
est défini comme une fonction ( theme => { /* definitions */ }
).
tsconfig.json
:
{
"compilerOptions": {
"sourceMap": false,
"target": "ES2017",
"module": "ES6",
"jsx": "react",
"moduleResolution": "Node",
"strictPropertyInitialization": true,
"strictNullChecks": true,
"noImplicitAny": true
}
}
(J'obtiens le même message lorsque
styles
est défini comme une fonction (theme => { /* definitions */ }
).
Ensuite, votre configuration a également un problème. Nous testons l'utilisation du rappel et cela fonctionne très bien. Il a cependant un bogue reproductible lors de l'utilisation d'un objet de styles statiques.
Le problème est de retour avec une combinaison de [email protected]
(config incrémental: true) et @material-ui/[email protected]
. Cela fonctionne cependant avec [email protected]
@TeoTN Merci pour le rapport. Je pense que je sais pourquoi cela se produit.
@TeoTN Pourriez-vous inclure le code qui cause des problèmes. Je ne peux pas le reproduire.
@ eps1lon voici un repo qui reproduit le bug: TeoTN / mui-ts-bug
Je suis également tombé sur l'erreur de ce ticket avec [email protected]
et @material-ui/[email protected]
.
Ma raison de passer de [email protected]
était que VS Code était incroyablement lent avec la complétion automatique et les info-bulles.
Lors de la rétrogradation à [email protected]
, de nouvelles erreurs se sont produites autour de makeStyles
comme
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,
J'ai pu résoudre ce problème en combinaison avec createStyles
comme:
const useStyles = makeStyles((theme: Theme) =>
createStyles({
main: {
position: 'absolute',
top: 0,
Il convient peut-être de mentionner que seul le import { createStyles } from '@material-ui/styles';
fonctionne alors que createStyles
de @material-ui/core
ne fonctionne pas puisque les typages sont différents.
L'utilisation de createStyles
n'était pas nécessaire avec [email protected]
et [email protected]
.
Étant donné que ce problème ne se produit que dans une version candidate de type manuscrit, je vais fermer ceci. Nous ne pouvons pas prendre en charge les versions instables de nos dépendances. Veuillez signaler un nouveau problème si cette erreur réapparaît dans une version stable de Typescript.
Cela semble être réel pour typescript 3.5.1, qui est la dernière version stable pour le moment (avec material-ui 4)
Avec la version 4.0.2 et ts 3.5.1, je peux déclencher cette erreur en ajoutant "strictNullChecks": false à mon tsconfig.json.
Avec la version 4.0.2 et ts 3.5.1, je peux déclencher cette erreur en ajoutant "strictNullChecks": false à mon tsconfig.json.
Ceci n'est pas pris en charge par nos typages:
Nos définitions sont testées avec le tsconfig.json suivant. L'utilisation d'un tsconfig.json moins strict ou l'omission de certaines bibliothèques peut entraîner des erreurs.
- https://material-ui.com/guides/typescript/
Chaque paquet publié sous types/
n'est pas testé avec "strictNullChecks": false
ainsi que pratiquement aucun paquet ne prend en charge cette configuration.
Je suis surpris. J'ai hérité de projets avec strict: false et je ne l'ai jamais fait générer plus d' erreurs auparavant.
Puisque la v3.x fonctionnait, j'ai supposé que 4.x le ferait aussi.
Quoi qu'il en soit, cette note pourrait aider d'autres personnes qui signalent ce problème, c'est certainement un coût inattendu pour la mise à niveau.
Autant que je me souvienne, il y avait d'autres problèmes dans 3.x. Soit vous ne les avez pas rencontrés, soit vous aviez déjà des types malsains. Cette exigence n'a pas été introduite avec 4.x.
Je suis sûr qu'il y en avait et j'ai eu de la chance.
Mais, si je prends un exemple de projet qui se compile bien avec strict: true
, je ne m'attends pas à rencontrer ce problème simplement en le retournant à strict: false
. Je ne vois pas comment des types malsains auraient quoi que ce soit à voir avec cette situation.
Je ne vois pas comment des types malsains auraient quoi que ce soit à voir avec cette situation.
A voir avec les types d'utilitaires qui rompent avec strictNullChecks: false
. Sans cet indicateur, undefined | null
peut être attribué à any
. Ce sont cependant des détails de mise en œuvre.
Ce numéro doit être rouvert!
Comment contourner ce problème pour le moment? Si je passe null, makeStyles lance l'erreur «impossible de trouver les classes indéfinies». Parfois, je n'ai pas d'accessoires à passer, alors qu'est-ce que je passe?
@krazyjakee essayez const c = useStyles({});
@krazyjakee essayez
const c = useStyles({});
Merci cela a fonctionné!
Je rencontre cette erreur avec dactylographié 3.7.5.
Cela fonctionne const c = useStyles({});
,
mais c'est incompatible avec la doc:
https://material-ui.com/zh/styles/basics/
FWIW, voir la même chose. J'ai essayé les suggestions publiées ici (https://github.com/mui-org/material-ui/issues/16867) avec strict
et strictNullChecks
, mais toujours pas de dés. Est-ce que const c = useStyles({});
"le chemin" maintenant?
Commentaire le plus utile
@krazyjakee essayez
const c = useStyles({});