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

如何检测TypeScript对象类型中属性是否为必填项?

判断对象属性是否必填的泛型类型实现

需求:实现泛型类型IsPropRequired<T, K>,接收对象类型T和其键K,返回布尔值表示该键是否为必填属性。示例如下:

type MyObject = {a: 1, b?: 2}

type IsPropRequired<T, K extends keyof T> = /* 待实现 */

type test1 = IsPropRequired<MyObject, 'a'> // 预期结果:true
type test2 = IsPropRequired<MyObject, 'b'> // 预期结果:false

实现代码

利用TypeScript的映射类型和条件类型可以完成这个需求:

type IsPropRequired<T, K extends keyof T> = T extends { [P in K]-?: T[P] } ? true : false;

原理说明

  • { [P in K]-?: T[P] }:通过映射类型将指定键K强制转为必填属性(-?表示移除可选修饰符)。
  • 条件类型判断:如果原始类型T能够赋值给这个强制必填的类型,说明T中的K本来就是必填项,返回true;反之则说明K是可选属性,返回false。

验证结果

将上述类型代入示例代码:

  • test1的结果为true,符合预期;
  • test2的结果为false,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:27:10