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

如何在TypeScript中约束函数返回与入参同结构的对象?

可行,用泛型即可实现需求

你需要的功能完全可以通过TypeScript的泛型实现,核心思路是用泛型参数捕获传入对象的具体键结构,而不是用丢失具体键信息的索引签名接口。

具体实现代码

// 泛型函数,T约束为键是字符串、值是string[]的对象
function transformer<T extends Record<string, string[]>>(argument: T): T {
  // 这里写你的转换逻辑,示例为浅拷贝每个数组
  const transformed = {} as T;
  for (const key in argument) {
    if (Object.prototype.hasOwnProperty.call(argument, key)) {
      transformed[key] = argument[key].map(item => item); // 示例转换操作
    }
  }
  return transformed;
}

效果验证

调用这个函数时,TypeScript会自动推导出入参的具体键集合,返回值的类型和入参完全一致:

const result = transformer({
  linda: ['1', '2', '3'],
  jacob: ['4', '5', '6']
})

result.linda; // ✅ 正常访问,编辑器会提供智能提示
result.jeremy; // ❌ TypeScript会报错:类型上不存在属性"jeremy"

原理说明

  • 泛型参数T会精确捕获传入对象的结构,包括所有具体的键和对应值的类型。
  • T extends Record<string, string[]>确保传入的对象只能有字符串键,且每个键对应的值都是string[]类型,符合你对值类型的约束。
  • 返回类型指定为T,强制返回值的结构和入参完全一致,从而实现智能提示和不存在键的错误检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:02:09