Material-ui: "TS2554: 1 argument attendu, mais 0." sur crochet retourné par makeStyles

Créé le 28 déc. 2018  ·  22Commentaires  ·  Source: mui-org/material-ui

  • [x] Ce n'est pas un problème v0.x.
  • [x] J'ai recherché les problèmes de ce référentiel et je pense que ce n'est pas un doublon.

Comportement attendu 🤔

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();

Comportement actuel 😯

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 |

bug 🐛 styles typescript

Commentaire le plus utile

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

Tous les 22 commentaires

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?

Cette page vous a été utile?
0 / 5 - 0 notes