Material-ui: "TS2554: Se esperaba 1 argumentos, pero obtuvo 0". colgado devuelto por makeStyles

Creado en 28 dic. 2018  ·  22Comentarios  ·  Fuente: mui-org/material-ui

  • [x] Este no es un problema de v0.x.
  • [x] He buscado las ediciones de este repositorio y creo que esto no es un duplicado.

Comportamiento esperado 🤔

TypeScript no debería mostrar un error al hacer:

Fuera del componente:
const useStyles = makeStyles(styles);

Dentro del componente:
const {/* stuff */} = useStyles();

Comportamiento actual 😯

La llamada a la función useStyles(); está subrayada y WebStorm dice "TS2554: Se esperaba 1 argumentos, pero obtuvo 0". en eso.

| Tech | Versión |
| -------------- | --------- |
| @ material-ui / styles | 3.0.0-alpha.4 |
| Reaccionar | 16.7.0-alpha.2 |
| TypeScript | 3.1.1 |

bug 🐛 styles typescript

Comentario más útil

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

Todos 22 comentarios

Incluya su declaración styles y tsconfig.json . ¿Aparece el error al ejecutar tsc ? Preguntar esto porque las integraciones IDE tienden a usar una versión de mecanografiado diferente.

Nitpick no relacionado: Prefiero las cadenas de versión resueltas react@next cambios con el tiempo. Probablemente quisiste decir [email protected] ?

No estoy ejecutando tsc yo mismo, estoy usando el IDE para transpilar .ts/x a .js/x directamente (en su lugar) cada vez que cambio un archivo de TypeScript.

La versión incluida con WebStorm que estoy usando es 3.1.1 .

Se actualizó el OP para reflejar la versión de React que uso: 16.7.0-alpha.2

styles variable es:

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

(Recibo el mismo mensaje cuando styles se define como una función ( theme => { /* definitions */ } ).

tsconfig.json :

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

(Recibo el mismo mensaje cuando styles se define como una función ( theme => { /* definitions */ } ).

Entonces tu configuración también tiene un problema. Probamos el uso de devolución de llamada y eso está funcionando bien. Sin embargo, tiene un error reproducible cuando se usa un objeto de estilos estáticos.

El problema ha vuelto con la combinación de [email protected] (complier config incremental: true) y @material-ui/[email protected] . Sin embargo, funciona con [email protected]

@TeoTN Gracias por el informe. Creo que sé por qué sucede esto.

@TeoTN ¿Podría incluir el código que está causando problemas? No puedo reproducirlo.

@ eps1lon aquí hay un repositorio que reproduce el error: TeoTN / mui-ts-bug

También encontré el error de este ticket con [email protected] y @material-ui/[email protected] .
Mi razón para actualizar de [email protected] fue que VS Code fue increíblemente lento con la finalización automática y la información sobre herramientas.

Al degradar a [email protected] hubo nuevos errores alrededor de makeStyles como

      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,

Pude arreglar esto en combinación con createStyles como:

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

Quizás vale la pena mencionar que solo el import { createStyles } from '@material-ui/styles'; funciona mientras que el createStyles de @material-ui/core no lo hace, ya que las mecanografías son diferentes.

No era necesario usar createStyles con [email protected] y [email protected] .

Dado que estos problemas solo ocurren en una versión candidata de mecanografiado, cerraré esto. No podemos admitir versiones inestables de nuestras dependencias. Presente un nuevo problema si este error vuelve a aparecer en una versión estable de Typecript.

Parece ser real para mecanografiado 3.5.1, que es la última versión estable por ahora (junto con material-ui 4)

Con la versión 4.0.2 y ts 3.5.1 puedo desencadenar este error agregando "strictNullChecks": false a mi tsconfig.json.

Con la versión 4.0.2 y ts 3.5.1 puedo desencadenar este error agregando "strictNullChecks": false a mi tsconfig.json.

Esto no es compatible con nuestras tipificaciones:

Nuestras definiciones se prueban con el siguiente tsconfig.json. Usar un tsconfig.json menos estricto u omitir algunas de las bibliotecas puede provocar errores.

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

Todos los paquetes publicados bajo types/ no se prueban con "strictNullChecks": false que significa que prácticamente ningún paquete admite esta configuración.

Estoy sorprendido. He heredado proyectos con estricto: falso y nunca antes había generado más errores.

Como v3.x funcionó, asumí que 4.x también lo haría.

De todos modos, esa nota podría ayudar a otros que están informando sobre este problema, sin duda es un costo inesperado para actualizar.

Hubo otros problemas en 3.x que yo recuerde. O no los encontró o ya tenía tipos poco sólidos. Este requisito no se introdujo con 4.x.

Estoy seguro de que las hubo y tuve suerte.

Pero, si tomo un proyecto de muestra que se compila bien con strict: true , no espero encontrar este problema simplemente cambiándolo a strict: false . No veo cómo los tipos poco sólidos tendrían algo que ver con esa situación.

No veo cómo los tipos poco sólidos tendrían algo que ver con esa situación.

Tiene que ver con tipos de utilidad que rompen con strictNullChecks: false . Sin esa bandera, undefined | null se puede asignar a any . Sin embargo, esos son detalles de implementación.

¡Este problema necesita reabrirse!

¿Cómo puedo solucionar este problema por ahora? Si paso nulo, makeStyles arroja el error 'no se pueden encontrar clases de indefinido'. A veces no tengo accesorios para aprobar, entonces, ¿qué paso?

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

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

Gracias esto funcionó!

Me encuentro con este error con el mecanografiado 3.7.5.
Esto const c = useStyles({}); funciona,
pero es inconsistente con el documento:
https://material-ui.com/zh/styles/basics/

FWIW, viendo lo mismo. Probé las sugerencias publicadas aquí (https://github.com/mui-org/material-ui/issues/16867) con strict y strictNullChecks , pero aún sin dados. ¿Es const c = useStyles({}); "el camino" ahora?

¿Fue útil esta página
0 / 5 - 0 calificaciones