【问题标题】:How to type Ant design with styled-components?如何使用样式组件键入 Ant 设计?
【发布时间】:2020-10-06 16:04:12
【问题描述】:

这是我公司代码审查中的一个经典点,通常我们会围绕使用 Ant 组件的样式化组件来解决:

const StyledInput = styled<any>(InputAnt)`
  ${p =>
    p.hasError &&
    `
    border-color: ${p.theme.red};
  `}
`

远非理想,因为它的行为与任何其他组件一样,需要更严格的类型。有趣的是,显而易见的方法仅适用于某些组件。见

interface ButtonP extends NativeButtonProps {
  isCustomProp: boolean
}

export const Button = styled<ButtonP>(p => <AntButton {...p} />)`
  color: ${p => p.isCustomProp ? 'pink' : 'steelblue'};
`

但是,其他组件将需要不同的类型机制。例如,与 Ant 的 Input 相同的方法将不起作用!:

interface StyledInputP extends InputProps {
  hasError: boolean
}

const StyledInput = styled<StyledInputP>(p => <InputAnt {...p} />)`
  ${p =>
    p.hasError &&
    `
    border-color: ${p.theme.red};
  `}
`

是否有指南或答案可以一劳永逸地解决这个问题!?

干杯

【问题讨论】:

    标签: javascript reactjs typescript antd styled-components


    【解决方案1】:

    你可以尝试这样修改

    interface StyledInputP extends InputProps {
      hasError: boolean
    }
    
    const StyledInput = styled((p: StyledInputP) => <Input {...p} />)`
      ${p =>
          p.hasError &&
            `
        border-color: ${p.theme.red};
      `}
    `;
    

    【讨论】:

      猜你喜欢
      • 2020-04-15
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 2018-09-05
      • 2019-03-13
      • 2021-11-02
      • 2019-01-22
      相关资源
      最近更新 更多