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

如何通过函数从sharedProps提取指定属性生成新TypeScript类型?

从共享类型中提取指定属性并转为必填类型的最优方案

你可以直接用TypeScript内置的工具类型组合,封装成可复用的泛型类型,不用逐个手动创建单独类型。

核心思路是结合Pick和Required两个内置工具:

  • Pick<T, K>:从类型T中筛选出指定的属性集合K
  • Required<T>:将类型中所有可选属性转为必填属性

自定义可复用工具类型

// 从类型T中提取指定属性K,并强制转为必填
type PickRequired<T, K extends keyof T> = Required<Pick<T, K>>;

针对sharedProps的使用示例

比如你需要提取className和children并让它们成为必填属性:

// 直接指定属性联合类型
type OnlyClassNameAndChildren = PickRequired<sharedProps, 'className' | 'children'>;

// 等价于手动定义的类型:
// type OnlyClassNameAndChildren = {
//   className: string;
//   children: ReactNode;
// }

如果想通过属性名数组来指定(更直观),可以用const断言把数组转为联合类型:

const targetProps = ['className', 'children'] as const;
// 从数组中推导属性联合类型
type TargetProps = typeof targetProps[number];

type OnlyTargetProps = PickRequired<sharedProps, TargetProps>;

额外场景:保留原属性可选性

如果不需要把属性转为必填,只是提取指定可选属性,直接用Pick即可:

type PickOptional<T, K extends keyof T> = Pick<T, K>;

// 示例:提取className和children,保留原可选性
type OptionalClassNameAndChildren = PickOptional<sharedProps, 'className' | 'children'>;

这种方案的优势在于:

  • 完全基于TypeScript原生能力,无需额外依赖
  • 泛型设计可以适配任意源类型,不止局限于sharedProps
  • 支持批量指定属性,一次定义即可复用
  • 精准满足你“仅包含指定属性且非可选”的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:02:16