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

TypeScript中如何为自定义rebuild函数实现精准返回类型推导

rebuild 函数的 TypeScript 类型定义问题

我需要实现一个rebuild函数,能够根据配置对象的规则从现有对象中提取对应字段生成新对象。配置对象的键为需要提取的目标键,值为对应期望的类型标记字符串,基础示例如下:

const result = rebuild(query, {
    name: 'string'
});

// query - { name: '123', dont_need: true }
// result - { name: '123' }

目前我已经完成了该函数的逻辑实现,但在类型定义编写上遇到了问题。之前尝试的实现方案代码如下:

type Type = 'string' | 'number';
type Config = Record<string, Type>;

interface ConfigType {
    string: string;
    number: number;
}

type RebuiltResult<T extends Config> = {
    [key in keyof T]: ConfigType[T[keyof T]]
}

但当前推导得到的返回类型中,name字段的类型为string | number,这是因为在类型定义中直接使用了通用的keyof T来获取类型映射。我知道可以实现精准的对应类型推导,但不清楚具体该如何编写类型定义。

实际使用场景参考

更多使用场景的表现如下:

  • 当源对象字段类型与配置要求匹配时,会被提取到结果中:
    const query = {
       name: 'Ivan',
       money: 3000,
       age: 20
    }
    
    const ivan = rebuild(query, {
       name: 'string',
       money: 'number'
    })
    
    // type -  { name?: string; money?: number }
    // value - { name: 'Ivan', money: 3000 }
    
  • 当源对象字段类型与配置要求不匹配时,该字段不会被包含在结果中:
    const ivan = rebuild(query, {
       name: 'string',
       money: 'string'
    })
    
    // type  - { name?: string; money?: string }
    // value - { name: 'Ivan' }
    // no money, since it's a number
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 11:27:03