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

TypeScript React扩展带静态组件的React.FC时如何消除TS(2339)错误

错误原因

你报错的本质原因是GridProps是Grid组件接收的入参的类型定义,用来约束你写<Grid xxx />时传入的xxx属性,而你现在的报错是Grid这个函数组件对象本身的静态属性Col缺少类型定义,二者完全无关,所以往GridProps里加Col属性当然解决不了问题。

解决方法

你需要给Grid组件本身定义包含静态属性的复合类型,具体实现步骤如下:

  1. 先分别定义Grid组件的入参类型和Col组件的入参类型:
import type { FC, ReactNode } from 'react';

// Grid组件自身的入参类型
export type GridProps = {
  children: ReactNode;
  className?: string;
};

// Col组件自身的入参类型,可根据你的实际需求补充字段
export type ColProps = {
  children: ReactNode;
  span?: number;
  className?: string;
};
  1. 定义包含静态属性的Grid复合类型:
// 复合类型 = Grid本身的函数组件类型 + 静态属性Col的类型
type GridCompositeType = FC<GridProps> & {
  Col: FC<ColProps>;
};
  1. 实现Grid组件并指定类型,最后挂载Col组件:
// 声明Grid组件时指定为上面定义的复合类型
export const Grid: GridCompositeType = ({ children, className }) => {
  // 你的Grid组件原有逻辑
  return <div className={className}>{children}</div>;
};

// 实现Col组件并挂载到Grid上
Grid.Col = ({ children, span, className }) => {
  // 你的Col组件逻辑
  return <div className={className} style={{ flex: span ?? 1 }}>{children}</div>;
};

补充说明

你之前见到的同类组件不需要在Props里定义对应属性,就是因为这些组件都是用了上面的复合类型写法,静态属性的定义和组件入参的Props本来就没有关系,自然不需要往GridProps里加字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:57:03