如何实现依赖参数的泛型方法,返回带类型安全的函数?
实现依赖于参数的类型安全泛型方法
你需要通过泛型约束捕获传入的字段名,针对性约束返回函数的参数类型,只强制指定字段为数字类型,其他字段不做限制。
正确实现代码
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
相关产品推荐
相关产品推荐

