如何使用defaultProps为React函数组件定义接口而不会引发丢失的类型错误?

HonzaSedloň

我一直在搜索许多论坛和文章,但没有找到任何成功的方法来为React中的功能组件定义接口,该接口具有在defaultProps中定义的必需属性,而不会引发“缺少属性” Typescript错误。

我试图直接在props中设置默认值,但是它也不起作用。有什么办法还是React和Typescript中未解决的问题?

为了实际解决此问题,我提供了CodeSandbox项目。

编辑misty-pine-rtdl8

type ButtonProps = {
  color: "white" | "green";
};

const Button: FunctionComponent<ButtonProps> = ({
  // First way to define default value
  color = "green",
  children
}) => <ButtonContainer>{children}</ButtonContainer>;

// Second way to define default value
Button.defaultProps = {
  color: "white"
} as Partial<ButtonProps>;

const ButtonContainer = styled.button<ButtonProps>`
  background-color: ${(props: ButtonProps) => props.color};
`;

const App: FunctionComponent = () => (
  <div className="App">
    <h1>Hello CodeSandbox</h1>
    <h2>Start editing to see some magic happen!</h2>
    {/* Here is an error */}
    <Button>hello world</Button>
  </div>
);
wentjun

由于colorButtonProps类型的唯一属性,因此可以使用Partial,它将部分类型的属性设置为可选:

const Button: FunctionComponent<Partial<ButtonProps>> = ({
  // First way to define default value
  color = "green",
  children
}) => <ButtonContainer>{children}</ButtonContainer>;

这是一个工作示例

编辑

跟进您的评论,这是我的建议。我们可以删除defaultPropsButtonProps来定义的类型ButtonContainerButton组件上,您可以简单地将剩余的道具散布到孩子身上ButtonContainer

type ButtonProps = {
  color: "white" | "green";
  fontSize: string;
};

const Button: FunctionComponent<Partial<ButtonProps>> = ({
  // First way to define default value
  children,
  ...styleProps
}) => <ButtonContainer {...styleProps}>{children}</ButtonContainer>;

const ButtonContainer = styled.button<ButtonProps>`
  background-color: ${(props: ButtonProps) => props.color};
  font-size: ${(props: ButtonProps) => props.fontSize};
`;

const App: FunctionComponent = () => (
  <div className="App">
    <h1>Hello CodeSandbox</h1>
    <h2>Start editing to see some magic happen!</h2>
    <Button color='green'>hello world</Button>
  </div>
);

这是更新的演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为使用泛型类型的typeof值的函数定义接口

来自分类Dev

使用Javascript库函数的Angular组件引发类型错误:不是函数

来自分类Dev

使用React useContext时如何正确定义类型接口?

来自分类Dev

为什么Python不会使用'-> type'函数定义引发类型异常?

来自分类Dev

当数组必须为某种类型时,为什么flowjs不会在空数组上引发错误?

来自分类Dev

如何在React函数组件中使用数组状态?

来自分类Dev

如何在Typescript接口中为函数定义void的返回类型?

来自分类Dev

如何使用React函数组件获取当前对象的句柄

来自分类Dev

Typescript为返回函数类型引发错误

来自分类Dev

如何“使用”接口中定义的功能类型

来自分类Dev

如何使用Typescript在React中为<video>引用定义类型?

来自分类Dev

react native:如何解决错误-传递内联函数将导致组件状态在重新渲染时丢失?

来自分类Dev

react native:如何解决错误-传递内联函数将导致组件状态在重新渲染时丢失?

来自分类Dev

在Delphi组件中更改事件类型后,编译器将不会引发错误

来自分类Dev

我在React函数组件中使用React.useRef时遇到错误

来自分类Dev

React 组件的 DefaultProps 结构

来自分类Dev

如何将特定功能的对象定义为类型或接口?

来自分类Dev

如何处理为未定义函数引发的异常?

来自分类Dev

在TSX组件内部使用JSX组件无法编译而不会引发错误

来自分类Dev

使用确保属性存在的类型创建通用React函数组件

来自分类Dev

fullCalendar自定义事件函数不会引发函数错误

来自分类Dev

为什么在函数定义之外声明的函数变量不会引发错误?

来自分类Dev

尝试使用接口的键/值定义函数的返回类型

来自分类Dev

抽象类的继承类不会引发致命错误;未定义的函数调用致命错误

来自分类Dev

如何反序列化实现接口的类类型的(JSON)对象:错误未定义无参数构造函数?

来自分类Dev

如何反序列化实现接口的类类型的(JSON)对象:错误未定义无参数构造函数?

来自分类Dev

为数组创建构造函数并使用自定义类型填充它

来自分类Dev

为数组创建构造函数并使用自定义类型填充它

来自分类Dev

为什么为__eq__定义参数类型会引发MyPy类型错误?

Related 相关文章

  1. 1

    为使用泛型类型的typeof值的函数定义接口

  2. 2

    使用Javascript库函数的Angular组件引发类型错误:不是函数

  3. 3

    使用React useContext时如何正确定义类型接口?

  4. 4

    为什么Python不会使用'-> type'函数定义引发类型异常?

  5. 5

    当数组必须为某种类型时,为什么flowjs不会在空数组上引发错误?

  6. 6

    如何在React函数组件中使用数组状态?

  7. 7

    如何在Typescript接口中为函数定义void的返回类型?

  8. 8

    如何使用React函数组件获取当前对象的句柄

  9. 9

    Typescript为返回函数类型引发错误

  10. 10

    如何“使用”接口中定义的功能类型

  11. 11

    如何使用Typescript在React中为<video>引用定义类型?

  12. 12

    react native:如何解决错误-传递内联函数将导致组件状态在重新渲染时丢失?

  13. 13

    react native:如何解决错误-传递内联函数将导致组件状态在重新渲染时丢失?

  14. 14

    在Delphi组件中更改事件类型后,编译器将不会引发错误

  15. 15

    我在React函数组件中使用React.useRef时遇到错误

  16. 16

    React 组件的 DefaultProps 结构

  17. 17

    如何将特定功能的对象定义为类型或接口?

  18. 18

    如何处理为未定义函数引发的异常?

  19. 19

    在TSX组件内部使用JSX组件无法编译而不会引发错误

  20. 20

    使用确保属性存在的类型创建通用React函数组件

  21. 21

    fullCalendar自定义事件函数不会引发函数错误

  22. 22

    为什么在函数定义之外声明的函数变量不会引发错误?

  23. 23

    尝试使用接口的键/值定义函数的返回类型

  24. 24

    抽象类的继承类不会引发致命错误;未定义的函数调用致命错误

  25. 25

    如何反序列化实现接口的类类型的(JSON)对象:错误未定义无参数构造函数?

  26. 26

    如何反序列化实现接口的类类型的(JSON)对象:错误未定义无参数构造函数?

  27. 27

    为数组创建构造函数并使用自定义类型填充它

  28. 28

    为数组创建构造函数并使用自定义类型填充它

  29. 29

    为什么为__eq__定义参数类型会引发MyPy类型错误?

热门标签

归档