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

如何在泛型类型为undefined时将属性设为可选?

解决方案

你可以通过条件类型结合交叉类型实现这个需求,根据泛型参数是否为undefined动态决定属性的可选性:

type Data<A = undefined, B = undefined> = 
  (A extends undefined ? { a?: A } : { a: A }) & 
  (B extends undefined ? { b?: B } : { b: B });

原理说明

  • 当泛型参数A等于undefined时,生成{ a?: A },属性a变为可选;
  • 当A是其他类型时,生成{ a: A },属性a保持必填;
  • 同理处理泛型参数B,最后通过交叉类型&将两个条件结果合并为最终类型。

测试验证

按你的测试用例验证:

// ✅ 编译通过:A为undefined,a可选,仅需提供必填的b
const test1: Data<undefined, string> = { b: 'B' };

// ❌ 编译报错:B为string(非undefined),b是必填项,未提供会报错
const test2: Data<number, string> = { a: 1 };

// ✅ 编译通过:A和B均非undefined,a和b都必填且已提供
const test3: Data<number, string> = { a: 1, b: 'B' };

这种写法逻辑清晰,能准确匹配你需要的类型约束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:27:06