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

TypeScript如何编写精简的可修改类型指定属性的泛型工具?

精简实现方案

你可以结合TS内置的Omit工具类型+交叉类型来简化逻辑,不需要手动遍历所有属性做条件判断,修改后的MakeNullable写法如下:

type MakeNullable<T extends { nullable: false, value: unknown }> = Omit<T, 'nullable' | 'value'> & {
  nullable: true
  value: T['value'] | null
}

该实现生成的NullableNumber和你原有实现的结果完全一致,后续如果要新增修改的属性,只需要把属性名加到Omit的第二个参数数组里,同时在后面的交叉对象里定义新的属性类型即可,逻辑非常清晰。


通用可复用方案

如果需要更通用的「修改指定类型部分属性」的工具,可以封装一个通用的Modify泛型,所有类似需求都可以复用它:

// 通用属性修改泛型:将T中与R同名的属性替换为R的定义,其余属性保留
type Modify<T, R extends Partial<Record<keyof T, any>>> = Omit<T, keyof R> & R;

// 基于Modify实现你的MakeNullable
type MakeNullable<T extends { nullable: false, value: unknown }> = Modify<T, {
  nullable: true
  value: T['value'] | null
}>

这个Modify泛型兼容所有同场景的属性修改需求,不需要每次都重复写遍历判断逻辑,TS 4.5.2版本完全支持该写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:04