Я также получаю эту ошибку с material-ui
v3.9.3 и styled-components
v4.2.0 , самыми последними версиями на момент публикации этого ответа.
Мой обходной путь для этого следующий:
import styled from 'styled-components'
import Button, { ButtonProps } from '@material-ui/core/Button'
const StyledButton = styled(Button)`
background: blue;
` as React.ComponentType<ButtonProps>
Приводит StyledButton
к тому же типу, что и UI материала Button
.Это устраняет ошибку и дает вам такую же проверку типов, как и для Button
.В большинстве случаев это все, что вам нужно.
В случаях, когда вам нужны дополнительные реквизиты для использования в стилях и вы хотите, чтобы они передавались, вы можете просто расширить ButtonProps
и привести к этому пользовательскому типу:
type StyledButtonProps = ButtonProps & { background: string }
const StyledButton = styled(Button)`
background: ${(props: StyledButtonProps) => props.background};
` as React.ComponentType<StyledButtonProps>
const MyComponent = () => (
<div>
<StyledButton size='small' background='blue'>one</StyledButton>
// ERROR HERE - forgot the 'background' prop
<StyledButton size='small'>two</StyledButton>
</div>
)