Я нашел ответ на свой вопрос =)
для первого вопроса
мы должны создать тип или интерфейс
type ColorStateForm = {
errors: any,
touch: any,
name: string,
value: string,
theme: any,
hideDefault?: boolean
}
чем мы используем этот тип или интерфейс в нашем стилизованном компоненте
export const CheckBoxCustom = styled.div<ColorStateForm >`
width: ${props => (props.width ? props.width : "24px")};
height: ${props => (props.height ? props.height : "24px")};
margin: ${props => (props.margin ? props.margin : "0")};
position: relative;
overflow: hidden;
border-radius: 4px;
flex: 0 0 24px;
&:before {
${props =>
props.hideDefault &&
css`
content: "";
position: absolute;
top: 0;
left: 0;
display: block;
width: ${props => (props.width ? props.width : "24px")};
height: ${props => (props.height ? props.height : "24px")};
border-style: solid;
border-width: 2px;
border-color: ${props =>
props.errors &&
props.touched &&
props.errors[props.name] &&
props.touched[props.name]
? props.theme.color.redError
: props.theme.color.mainBlue};
box-sizing: border-box;
`};
}
, здесь нам нужно использовать TypeScript для условного css в строке
&:before {
${props =>
props.hideDefault &&
css`
нам нужно снова передать наш тип или интерфейс . Например:
&:before {
${(props: ColorStateForm ) =>
props.hideDefault &&
css`
вот и все, мой код VS чист и дружелюбен для TypeScript
для второго вопроса
Прежде всего Я создал тип
type ColorStateForm = {
errors: any,
touch: any,
name: string,
value: string,
theme: any
}
да, я знаю, что «любой» тип является злом, вы можете написать что-нибудь вместо
, чем я переписал свой троичный оператор таким образом и добавил мой созданный тип
const colorStateForm = (props: ColorStateForm): string => {
const {errors, touched, name, value, theme} = props;
if(errors && touched && errors[name] && touched[name]){
return theme.coloor.redError;
}
if(!value && (!value.length || value.length === 0)) {
return theme.color.inactiveBlue;
}
return theme.color.green;
}
Надеюсь, эта информация будет полезна