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

TypeScript如何实现函数返回与输入LocationMap同键结构的对象

TypeScript 函数返回结构与输入LocationMap匹配的类型约束实现

你可以通过泛型捕获输入对象的具体结构,再绑定返回值类型来实现需求,核心实现如下:

export interface LocationMap {
  [displayKey: string]: string[];
}

// 泛型T继承LocationMap,同时保留传入对象的具体键结构
function bar<T extends LocationMap>(map: T): T {
  // 执行业务逻辑
  // 示例实现:遍历所有输入键,统一生成返回值
  return Object.fromEntries(
    Object.keys(map).map(key => [key, ['自定义返回的字符串数组']])
  ) as T;
}

效果验证

你可以用以下代码测试类型约束效果:

// 定义输入对象,用satisfies保证符合LocationMap规范,同时保留原始键结构
const input = {
  foo: ['bar', 'baz'],
  addr: ['beijing', 'shanghai']
} satisfies LocationMap;

const output = bar(input);
// 此时output的类型会被自动推导为:{ foo: string[], addr: string[] }
// 如果返回对象缺少foo/addr任意一个键,或者新增其他未在input中定义的键,TS都会直接抛出类型错误

核心说明

  • 泛型T extends LocationMap的作用有两个:一是限制输入参数必须符合LocationMap的基础结构(所有值都是字符串数组),二是不会被LocationMap的字符串索引抹除输入对象的具体键信息,能完整捕获传入的键集合
  • 返回值声明为T类型,就强制要求返回对象的键集合、每个键对应的值类型和输入完全一致
  • 如果需要更严格的约束(比如返回数组的元素/长度也和输入绑定),可以给输入对象加上as const声明,再将泛型调整为T extends Readonly<LocationMap>即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:42:00