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

TypeScript中如何仅校验传入函数的对象键名,不校验值类型?

你之前的写法报错是因为keyof T返回的是泛型T的所有键名组成的联合类型(对于你的User接口来说就是"id" | "firstName" | "age"),属于基础值类型,并不是对象类型,自然不能接收对象入参。

你需要用TS内置的Record工具类型构造符合要求的对象类型,入参对象的键限制为T的合法键,值类型不做限制即可,代码如下:

interface User {
  id: number;
  firstName: string;
  age: number;
}

// 要求入参必须包含T的所有合法键,不允许传入额外键,值类型不校验
function selectMap<T>(obj: Record<keyof T, any>) {}

// 如果允许只传部分T的键,改用以下定义即可
// function selectMap<T>(obj: Partial<Record<keyof T, any>>) {}

selectMap<User>({
  id: 'id',
  firstName: 'first_name',
  age: 'age'
})

此时如果你传入的对象包含User接口中不存在的键、或者缺少必填的键,TS都会抛出类型错误,完全符合你的校验需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:36:03