Material-ui: "TS2554: Esperava-se 1 argumento, mas obteve 0." no gancho retornado por makeStyles

Criado em 28 dez. 2018  ·  22Comentários  ·  Fonte: mui-org/material-ui

  • [x] Este não é um problema de v0.x.
  • [x] Pesquisei os problemas deste repositório e acredito que não seja uma duplicata.

Comportamento esperado 🤔

O TypeScript não deve mostrar um erro ao fazer:

Fora do componente:
const useStyles = makeStyles(styles);

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

Comportamento Atual 😯

A chamada de função useStyles(); está sublinhada e WebStorm diz "TS2554: Esperava-se 1 argumento, mas obteve 0." nele.

| Tech | Versão |
| -------------- | --------- |
| @ material-ui / styles | 3.0.0-alpha.4 |
| React | 16.7.0-alpha.2 |
| TypeScript | 3.1.1 |

bug 🐛 styles typescript

Comentários muito úteis

@krazyjakee, tente const c = useStyles({});

Todos 22 comentários

Inclua sua declaração styles e tsconfig.json . O erro aparece ao executar tsc ? Perguntar isso porque as integrações IDE tendem a usar uma versão de texto digitado diferente.

Nitpick não relacionado: prefira as strings de versão resolvidas react@next mudanças ao longo do tempo. Você provavelmente quis dizer [email protected] ?

Não estou executando tsc sozinho, estou usando o IDE para transpilar .ts/x para .js/x diretamente (no local) sempre que altero um arquivo TypeScript.

A versão empacotada com o WebStorm que estou usando é 3.1.1 .

Atualizado o OP para refletir a versão do React que uso: 16.7.0-alpha.2

styles variável

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

(Eu recebo a mesma mensagem quando styles é definido como uma função ( theme => { /* definitions */ } ).

tsconfig.json :

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

(Eu recebo a mesma mensagem quando styles é definido como uma função ( theme => { /* definitions */ } ).

Então sua configuração também tem um problema. Testamos o uso de callback e está funcionando bem. No entanto, ele tem um bug reproduzível ao usar um objeto de estilos estáticos.

O problema está de volta com a combinação de [email protected] (complier config incremental: true) e @material-ui/[email protected] . No entanto, funciona com [email protected]

@TeoTN Obrigado pelo relatório. Acho que sei por que isso acontece.

@TeoTN Você pode incluir o código que está causando o problema. Eu não consigo reproduzir isso.

@ eps1lon aqui está um TeoTN / mui-ts-bug

Também me deparei com o erro deste tíquete com [email protected] e @material-ui/[email protected] .
Meu motivo para atualizar de [email protected] foi que o VS Code era incrivelmente lento com preenchimento automático e dicas de ferramentas.

Ao fazer o downgrade para [email protected] , surgiram novos erros em torno 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,

Consegui corrigir isso em combinação com createStyles como:

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

Talvez valha a pena mencionar que apenas import { createStyles } from '@material-ui/styles'; funciona, enquanto createStyles de @material-ui/core não funciona, já que as digitações são diferentes.

Usar createStyles não era necessário com [email protected] e [email protected] .

Como esse problema só ocorre em um candidato a lançamento do texto datilografado, fecharei isso. Não podemos oferecer suporte a versões instáveis ​​de nossas dependências. Registre um novo problema se esse erro reaparecer em uma versão estável do Typescript.

Parece ser real para o texto datilografado 3.5.1, que é a versão estável mais recente por enquanto (junto com material-ui 4)

Com a versão 4.0.2 e ts 3.5.1, posso acionar esse erro adicionando "strictNullChecks": false ao meu tsconfig.json.

Com a versão 4.0.2 e ts 3.5.1, posso acionar esse erro adicionando "strictNullChecks": false ao meu tsconfig.json.

Isso não é suportado por nossas tipificações:

Nossas definições são testadas com o seguinte tsconfig.json. Usar um tsconfig.json menos estrito ou omitir algumas das bibliotecas pode causar erros.

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

Cada pacote publicado em types/ não foi testado com "strictNullChecks": false , também significando que praticamente nenhum pacote suporta esta configuração.

Estou surpreso. Eu herdei projetos com strict: false e nunca tinha gerado mais erros antes.

Como a v3.x funcionou, presumi que a 4.x também funcionaria.

De qualquer forma, essa nota pode ajudar outras pessoas que estão relatando esse problema, certamente é um custo inesperado para atualizar.

Havia outros problemas no 3.x, pelo que me lembro. Você não os encontrou ou já tinha tipos doentios. Este requisito não foi introduzido com o 4.x.

Tenho certeza que havia e tive sorte.

Mas, se eu pegar um projeto de amostra que compila bem com strict: true , não espero encontrar esse problema simplesmente mudando-o para strict: false . Não vejo como os tipos doentios teriam algo a ver com essa situação.

Não vejo como os tipos doentios teriam algo a ver com essa situação.

Tem a ver com tipos de utilitários que quebram com strictNullChecks: false . Sem esse sinalizador undefined | null pode ser atribuído a any . No entanto, esses são detalhes de implementação.

Este problema precisa ser reaberto!

Como faço para contornar esse problema agora? Se eu passar nulo, makeStyles lança o erro 'não é possível encontrar classes de indefinidas'. Às vezes não tenho adereços para passar, então o que devo passar?

@krazyjakee, tente const c = useStyles({});

@krazyjakee, tente const c = useStyles({});

Obrigado, isso funcionou!

Eu me deparo com esse erro com o texto digitado 3.7.5.
Este const c = useStyles({}); funciona,
mas é inconsistente com o documento:
https://material-ui.com/zh/styles/basics/

FWIW, vendo a mesma coisa. Tentei as sugestões postadas aqui (https://github.com/mui-org/material-ui/issues/16867) com strict e strictNullChecks , mas ainda sem dados. const c = useStyles({}); "é o caminho" agora?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

iamzhouyi picture iamzhouyi  ·  3Comentários

rbozan picture rbozan  ·  3Comentários

finaiized picture finaiized  ·  3Comentários

activatedgeek picture activatedgeek  ·  3Comentários

FranBran picture FranBran  ·  3Comentários