如何检测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
相关产品推荐
相关产品推荐

