问题
Here is my styled component.
import * as React from 'react';
import styled from 'styled-components';
import { ComponentChildren } from 'app-types';
interface Props {
children: ComponentChildren;
emphasized: boolean;
}
const HeadingStyled = styled.h2`
${props => props.emphasized && css`
display: inline;
padding-top: 10px;
padding-right: 30px;
`}
`;
const Heading = (props: Props) => (
<HeadingStyled>
{props.children}
</HeadingStyled>
);
export default Heading;
I get warnings that:
Property 'emphasized' does not exist on type 'ThemedStyledProps<DetailedHTMLProps<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, any>'.
Cannot find name 'css'. Did you mean 'CSS'?
How can I get this to work?
回答1:
- The styled component will have to specify the prop to pass to the component like
styled("h2")<IProps>
. You can read more about the pattern from documentation css
is not required here, it is added as a helper when you need to actually return CSS from a function. Check out conditional rendering.
Taking these into account, the component becomes:
const HeadingStyled = styled("h2")<{emphasized: boolean}>`
${props => props.emphasized && `
display: inline;
padding-top: 10px;
padding-right: 30px;
`}
`;
A use-case for css
回答2:
The previous answer worked for me, but just to add some information that was also helpful in my case:
StyledComponents uses a "ThemedStyledFunction" interface that allows the user to define additional Prop Types.
That means you could create an interface like:
interface HeadingStyled {
emphasized: boolean;
}
And use it on the component:
const HeadingStyled = styled("h2")<HeadingStyled>`
${props => props.emphasized && `
display: inline;
padding-top: 10px;
padding-right: 30px;
`}
`;
(Which is a cleaner way to implement what @BoyWithSilverWings suggested, in case you have multiple props)
Check this discussion for more complete information:
https://github.com/styled-components/styled-components/issues/1428#issuecomment-358621605
来源:https://stackoverflow.com/questions/52404958/using-styled-components-with-typescript-prop-does-not-exist