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

如何在TypeScript中实现MarkNullable工具类型将指定属性设为可空

解决方案

你只需要把Pick<T, K>部分替换为映射类型,给选中的属性的类型联合null即可,修改后的MarkNullable定义如下:

type MarkNullable<T, K extends keyof T> = Omit<T, K> & { [P in K]: T[P] | null };

原理解释

  • 先用Omit<T, K>从原类型T中排除需要标记为可空的属性,保留其他属性的原有类型
  • 再通过映射类型{ [P in K]: T[P] | null }构造出所有指定属性都附加了null类型的新对象类型
  • 两者交叉之后就得到了「指定属性可空、其余属性保持原类型」的目标类型

修改后你的示例代码即可正常工作,Y类型的a属性会被推导为number | null,b属性保持number类型不变,符合预期,完整可运行代码如下:

type MarkNullable<T, K extends keyof T> = Omit<T, K> & { [P in K]: T[P] | null };

type X = {
    a: number,
    b: number
}

type Y = MarkNullable<X, 'a'>

const y: Y = {} as any

y.a = null // 正常通过类型校验
y.a = 1 // 正常通过类型校验
y.b = 1 // 正常通过类型校验
y.b = null // 会触发类型错误,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:06:08