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

如何实现依赖参数的泛型方法,返回带类型安全的函数?

实现依赖于参数的类型安全泛型方法

你需要通过泛型约束捕获传入的字段名,针对性约束返回函数的参数类型,只强制指定字段为数字类型,其他字段不做限制。

正确实现代码

function myMethod<K extends string>(fieldName: K) {
  return (val: { [P in K]: number }) => {
    const targetValue = val[fieldName]; // 类型自动推导为number,可安全处理
    // 编写你的业务逻辑
  };
}

测试验证

用你提供的示例代码测试:

const a = {
  pname: 32,
  other: 'asasd'
};
const b = {
  pname: 'aaa',
  other: 'asasd'
};

myMethod('pname')(a); // 编译器/IDE无报错,符合预期
myMethod('pname')(b); // 编译器/IDE会提示错误:类型"string"不能赋值给类型"number"

原理说明

  • 泛型参数K extends string会捕获你传入的具体字段名(比如'pname'),而非宽泛的string类型。
  • 返回函数的参数类型{ [P in K]: number }是映射类型,仅要求对象中K对应的字段必须为number类型,其他字段类型不受限制,完全匹配你的需求。
  • 你之前的写法{[fieldName: string]: number}是字符串索引签名,会强制对象所有属性都为number,这就是导致不符合预期的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:35:00