You need to enable JavaScript to run this app. TypeScript如何限制patch函数仅接收目标对象已存在的属性
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript如何限制patch函数仅接收目标对象已存在的属性

可以通过TypeScript类型系统实现该限制,只需要调整patchable函数的类型定义即可。

实现思路

给patch方法的入参添加类型约束:

  • 基础方案使用TypeScript内置工具类型Partial<T>:该类型会将泛型T的所有属性转为可选,天然限定了只能使用T中已存在的键,搭配TypeScript默认的对象字面量多余属性检查,就可以直接拦截传入不存在字段的操作
  • 严格方案可以搭配Record<string, never>交叉类型:即使传入提前声明的非字面量变量,也会拦截携带额外属性的入参

修改后完整代码

class Test{
  a:number;
  b:number;
}

var c:Test={a:0,b:1}

function patchable<T>(obj:T){
  return {
    // 基础约束写法,如需更严格可替换为 Partial<T> & Record<string, never>
    patch:function(prop: Partial<T>){
      return patchable({...obj,...prop})
    },
    value:function():T{return obj}
  }
}

// 此行会直接报类型错误:对象字面量只能指定已知属性,"notAllow" 不存在于类型 "Partial<Test>" 中
c=patchable(c).patch({notAllow:94}).value()

// 合法调用示例
c=patchable(c).patch({a: 100}).value()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:48:02