【发布时间】:2021-07-07 06:18:40
【问题描述】:
在 Typescript 中,我设置了一个组件如下:
interface MyComponentProps {
type: 'round' | 'square';
}
const MyComponent: FC<MyComponentProps> = ({type = 'round'}) => {
return (
<div />
);
};
type 属性是必需的,并且在组件定义中设置了默认值,但在调用组件时仍然出现错误:
<MyComponent />
// Property 'type' is missing in type '{ }' but required in type 'MyComponentProps'.
将属性type 设置为可选的type? 可以通过将类型隐式更改为'round' | 'square' | undefined 来解决问题,但我不希望该属性可能是undefined,因为这会导致问题和奇怪的代码在我必须考虑type 在每一点上都是undefined 的地方。
我想要发生什么?
我希望 'type' 在未传递时具有默认值,但不定义为 undefined(即可选)。
我尝试了什么?
我尝试添加
MyComponent.defaultProps = {
type: 'round'
};
但这根本没有帮助,而且我知道 defaultProps 无论如何都将被功能组件弃用。
【问题讨论】:
-
如果你想要一个默认值,那么这不是必需的属性吗?
-
技术上是的,但是“非必需”属性表明它是可选的,这意味着它可能是未定义的,我不希望发生这种情况,从那时起我必须断言它在每一步都被定义.
-
那么默认道具可以正常工作吗?
-
如果 prop 是可选的并且未传递,则默认 prop 会接管,所以它在这个意义上是有效的。如果 prop 是必需的,有一个默认值,但没有通过,那么应用程序甚至不会编译。定义
defaultProps完全没有效果。 -
不支持这种方式。当您提供默认道具时。这不是必需的道具。如果您希望该道具作为其他值,则必须传递该值。
标签: reactjs typescript react-props