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

如何为渲染组件数组的React组件编写类型安全的.d.ts声明文件

React Column组件类型安全.d.ts实现方案

核心通过泛型搭配React内置的ComponentProps工具类型,自动提取传入组件的Props类型做options的校验依据,同时完全兼容两种layout传参格式。

直接替换原有声明文件内容即可:

import * as React from 'react';

// 配置对象形式的布局项:泛型约束组件类型,自动推导对应options结构
type LayoutConfigItem<C extends React.ElementType = React.ElementType> = {
  component: C;
  options?: React.ComponentProps<C>;
};

// 布局项联合类型:支持直接传入组件、传入配置对象两种形式
type LayoutItem = React.ElementType | LayoutConfigItem;

interface ColumnProps {
  className?: string;
  layout?: LayoutItem[];
}

// 组件声明,函数组件/类组件二选一即可
export declare const Column: React.FC<ColumnProps>;
// 类组件写法:
// export declare class Column extends React.Component<ColumnProps> {}

类型校验效果

  • 直接在layout数组中传入组件(如示例中的Input、Date)时,类型校验完全正常,和原有使用行为一致
  • 传入配置对象形式时,TS会自动匹配component字段对应组件的Props类型校验options:传入组件不支持的属性、属性值类型不匹配时,TS会直接抛出类型错误
  • 无需手动为每个组件声明options类型,所有类型推导自动完成

额外修复了原有类型定义的漏洞:旧定义将component设为可选,会允许「只传options不传component」的非法传参,调整为联合类型后会自动拦截这类错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:57:15