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

如何在TypeScript中定义组件Props的通用提供者属性对象?

解决方案:ComponentProps中XXX的正确类型

你需要将ComponentProps里的XXX替换为Partial<Record<Providers, Provider>>,也可以使用等价的映射类型{ [K in Providers]?: Provider },两种写法都能满足需求。

类型说明

  • Record<Providers, Provider>:TypeScript内置工具类型,用于生成一个对象类型,其键为Providers枚举的所有成员,对应的值必须符合Provider类型。
  • Partial<>:将包裹的对象类型的所有属性转为可选,这样你可以灵活传入任意数量的提供者(仅传facebook、同时传facebook和google,甚至不传都合法),完美匹配“属性数量可灵活变化”的要求。

修改后的完整代码示例

export enum Providers{
  facebook="facebook",
  google="google"
}

export type Provider = {
  id:string;
  name:string;
}

export interface ComponentProps{
  providers?: Partial<Record<Providers, Provider>>;
}

export const Component = ({providers}: ComponentProps) => {
  return <>
{providers?.facebook && "Has Facebook"} {providers?.google && "Has Google"}
</>;
}

// 合法传参示例:
<Component providers={{
  facebook: {
    id: 'test',
    name: 'test'
  }
}}/>

等价写法(映射类型)

如果更习惯手动定义映射类型,也可以写成:

export interface ComponentProps{
  providers?: { [K in Providers]?: Provider };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:54:16