Здесь происходит много вещей.
props.theme не будет набираться должным образом, если у вас нет внутреннего типа для Темы, дополненного где-то вроде этого ...
declare module "styled-components" {
/* tslint:disable */
export interface DefaultTheme extends YourThemeInterfaceType {}
}
Это изменит тип props.theme на YourThemeInterfaceType, если вы будете правильно следовать документации по дополнению, но если вы не можете просто создать файл styled-components.d.ts и это для своего tsconfig.
"include": [
"src/**/*"
],
Далее вам нужен тип аргументов, чтобы знать, что «name» - это строка, и className - это также предполагаемая необязательная строка, просто переписайте приведенное выше.
interface IIconProps {
name: string;
className?: string;
};
const Icon = styled(({name, className, ...props}: IIconProps) => <i className={`material-icons ${className}`} {...props}>{name}</i>)`
font-size: ${props => props.theme.sizeLarger};
`;
const test = <Icon name={"xyz"} className={"xyz"}/> // passes typecheck.
Надеюсь, что этопомогает.
РЕДАКТИРОВАТЬ: проптипы также бесполезны в машинописи.