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

TypeScript中如何实现对象两个可选属性的联动必填?

实现TypeScript中属性的联动必填/可选

要实现「age和isHiringPossible要么同时存在,要么同时不存在」的约束,不能用单一接口定义,得通过联合类型组合两种合法的结构:

方案代码

type MakeMandatory = 
  // 情况1:仅包含必填的name,age和isHiringPossible都不存在
  { name: string }
  // 情况2:同时包含name、age和isHiringPossible,后两者为必填
  | { name: string; age: number; isHiringPossible: boolean };

验证示例

  • 合法用法:
// 仅提供name
const valid1: MakeMandatory = { name: "Alice" };

// 同时提供三个属性
const valid2: MakeMandatory = { name: "Bob", age: 30, isHiringPossible: true };
  • 非法用法(TypeScript会直接报错):
// 仅提供name和age,缺少isHiringPossible
const invalid1: MakeMandatory = { name: "Charlie", age: 25 };

// 仅提供name和isHiringPossible,缺少age
const invalid2: MakeMandatory = { name: "Dave", isHiringPossible: false };

拆分接口的写法(可读性更强)

如果需要复用基础结构,可以拆分为多个接口再组合:

interface BaseProfile {
  name: string;
}

interface CompleteHiringProfile extends BaseProfile {
  age: number;
  isHiringPossible: boolean;
}

type MakeMandatory = BaseProfile | CompleteHiringProfile;

这种写法和上面的联合类型效果完全一致,只是拆分后更便于维护和扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:40:22