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

Typescript如何动态校验函数第二个参数不存在第一个参数的key

你可以通过新增一个泛型参数捕获第一个入参的键集合,再基于这个集合动态过滤第二个入参的允许字段实现需求,改造后的代码如下:

interface Todo {
  title: string;
  description: string;
}

// 新增泛型K用于捕获第一个参数left中存在的键
function test<T, K extends keyof T>(left: Partial<Pick<T, K>> & Partial<T>, right: Partial<Omit<T, K>>): void {
  console.log(left, right);
};

// 此处会正常触发TS错误提示:对象字面量只能指定已知属性,类型“Partial<Omit<Todo, "title">>”不存在属性“title”
test<Todo>({ title: 'A' }, { description: 'B', title: 'AB' })

实现原理

  • 泛型K会自动从第一个参数的实际传入值中推导所有存在的键的联合类型,不需要手动传入
  • 用Omit<T, K>动态剔除基础类型T中已经在left里出现过的所有键,第二个参数right仅允许传入剩下的键
  • 即使显式指定了基础泛型T的类型,TS依然能正确推导K的实际值,完成重复键的校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:36:01