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

TypeScript 中如何为 FC 类型组件定义泛型并传递泛型参数?

泛型Props的FC组件正确书写语法

你原来的代码问题是泛型参数T未提前声明作用域,直接在FC<CatProps<T>>中使用会被判定为未定义类型。要实现带泛型Props的FC类型组件,正确写法如下:

完整可运行代码示例

import type { FC, ReactElement } from 'react';

// 泛型Props定义保持不变
interface CatProps<T> {
  value: T
}

// 写法1:直接对齐FC类型定义声明泛型(完全符合FC类型要求)
const Cat: <T>(props: CatProps<T> & { children?: React.ReactNode }) => ReactElement | null = <T,>(props) => {
  return <h1>Hello World! 当前传入的value值为:{props.value}</h1>
}

// 写法2:通过类型别名简化泛型FC声明
type GenericFC<P = unknown> = <T>(props: P<T> & { children?: React.ReactNode }) => ReactElement | null;
const Cat2: GenericFC<CatProps> = <T,>(props) => {
  return <h1>Hello World! 当前传入的value值为:{props.value}</h1>
}

// 调用方式和你原来的写法一致,可正常传递泛型
const cat = <Cat<number> value={123} />
const cat2 = <Cat2<string> value="测试文本" />

注意要点

  • 在.tsx文件中编写泛型箭头函数时,需要在泛型参数后加一个逗号<T,>,避免TS将尖括号识别为JSX标签导致语法报错。
  • 由于FC本身是固定泛型参数的类型,无法直接绑定动态泛型T,因此需要将泛型参数声明在函数定义的最外层,才能实现调用组件时动态传递泛型给Props接口。

内容的提问来源于stack exchange,提问作者Иван Вольнов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:36:03