切换主题
字数
683 字
阅读时间
3 分钟
因为函数和组件是一个东西, 所以函数参数 props和组件的 props也是一个东西
tsx
type MyComponentProps = {
title: string;
color?: string; // 可选的属性
};
const MyComponent: FC<MyComponentProps> = (props: MyComponentProps) => {
return (
<div style={{ color: props.color || 'black' }}>
{props.title}
</div>
);
};
MyComponent: FC<MyComponentProps>
:(**MyComponent: FC)声明了组件的返回值类型(一个 React 元素)并(<MyComponentProps>)指定了组件
props` 的类型。props: MyComponentProps
:声明了函数组件的参数类型。- 参数类型和返回值类型可以不同。在 React 中,参数是
props
对象,而返回值通常是 JSX(JSX.Element
),它们类型上没有必须相同的要求。
<MyComponentProps>
的作用
- 当我们写
FC<MyComponentProps>
时,MyComponentProps
是作为泛型参数传给FC
,告诉 TypeScript 这个组件的props
应该符合MyComponentProps
类型的结构。
在有MyComponent: FC<MyComponentProps>的情况写, 写不写props: MyComponentProps没有区别吗
在有 MyComponent: FC<MyComponentProps>
的情况下,写不写 props: MyComponentProps
确实没有区别,因为 TypeScript 会根据 FC<MyComponentProps>
自动推断 props
的类型为 MyComponentProps
。下面是详细解释。
为什么写不写 props: MyComponentProps
没有区别
FC<MyComponentProps>
自动推断props
类型:- 当你使用
FC<MyComponentProps>
时,TypeScript 已经知道这个组件的props
类型应该是MyComponentProps
。因此,当你在组件的参数中写(props)
时,TypeScript 会自动将props
类型设置为MyComponentProps
。 - 这样一来,即使不显式写出
(props: MyComponentProps)
,TypeScript 仍然会提供正确的类型检查和代码提示。
- 当你使用
显式声明
props
类型是多余的:- 在这种情况下,显式地写出
(props: MyComponentProps)
并不会提供额外的类型信息,只是重复了一次类型声明。虽然这样做并不会导致错误,但它显得有些冗余。
- 在这种情况下,显式地写出
示例对比
省略显式声明:
tsx
const MyComponent: FC<MyComponentProps> = (props) => {
return (
<div>
{props.title}
</div>
);
};
显式声明 props
类型:
tsx
const MyComponent: FC<MyComponentProps> = (props: MyComponentProps) => {
return (
<div>
{props.title}
</div>
);
};
两者在功能上和类型检查上完全相同,因为 TypeScript 会根据 FC<MyComponentProps>
推断出 props
的类型。
总结
- 有 FC
<MyComponentProps>
的时候写不写props: MyComponentProps
没有区别,因为FC<MyComponentProps>
已经为 TypeScript 提供了足够的信息来推断props
的类型。 - 为了代码简洁,通常推荐省略显式的
props
类型声明,让 TypeScript 自动推断。这样可以减少冗余代码,同时保持代码的可读性和清晰性。
贡献者
sunchengzhi