何时在 TypeScript 中使用 JSX.Element、ReactNode 和 ReactElement?
大家好!我开始学习 React 与 TypeScript,遇到了组件返回值类型和 props 类型的混淆。
这是一个简单的组件:
```typescript
interface Props {
children: ???; // 这里写什么?
icon: ???; // 这里呢?
}
function Card({ children, icon }: Props) {
return (
{icon}
);
}
```
我在不同项目中看到三种类型:`JSX.Element`、`ReactNode` 和 `ReactElement`。它们看起来用于相同目的,但又不完全一样。
例如,我知道:
- `ReactNode` 可用于 children
- `JSX.Element` 从函数组件返回
- `ReactElement` 是基础类型
但当我写:
```typescript
function MyComponent(): JSX.Element {
return {children}
Hello
; // 可以工作
}
function MyComponent2(): React.ReactNode {
return Hello
; // 也可以工作
}
```
有什么区别?对于 props 来说哪种类型是正确的?