You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Typescript中用function替代const声明组件的报错如何解决

错误原因

你对React.FC的类型标注位置使用错误。React.FC是函数组件本身的类型,不是组件函数的返回值类型。你之前用const声明组件时,是给存储组件的变量标注类型为React.FC,符合类型定义;但改写为命名函数时,你错误地将函数返回值标注为React.FC,而组件实际返回的是JSX元素,因此触发类型不匹配报错。

对应报错的中文释义:

类型“Element”不能赋值给类型“FC<{}>”。类型“ReactElement<any, any>”无法匹配签名“(props: { children?: ReactNode; }, context?: any): ReactElement<any, any> | null”。

解决方案

两种写法运行效果完全一致,可根据团队规范或个人习惯选择:

方案1:保留React.FC类型标注

如果需要沿用React.FC的特性(自带children可选类型声明,不需要手动在props中定义),可以通过给函数表达式标注类型的方式改写:

const MyComponent: React.FC = function() {
  return <div>My Component</div>;
}

方案2:不使用React.FC,直接标注函数参数和返回值

如果不想用React.FC,可以直接给组件函数的入参(props)标注类型,返回值标注为JSX.Element(也可以省略返回值标注,TS会自动推导):

// 无props的场景
function MyComponent(): JSX.Element {
  return <div>My Component</div>;
}

// 有props的场景
interface MyComponentProps {
  title: string;
  // 如果组件要接收children参数,需要手动声明类型,使用React.FC时不需要这一步
  children?: React.ReactNode;
}

function MyComponent(props: MyComponentProps): JSX.Element {
  return <div>{props.title}: {props.children}</div>;
}

内容的提问来源于stack exchange,提问作者Gen Tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:54:05