O TypeScript não deve mostrar um erro ao fazer:
Fora do componente:
const useStyles = makeStyles(styles);
Dentro do componente:
const {/* stuff */} = useStyles();
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 |
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?
Comentários muito úteis
@krazyjakee, tente
const c = useStyles({});