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

如何遍历接口键生成值类型依赖键名的新TypeScript接口

如何遍历接口键生成值类型依赖键名的TypeScript接口

我们需要定义一个类型IParse<T>,遍历接口T的所有键,实现:

  • 当键名为'a'时,对应值类型为number
  • 其余键的对应值类型为string

原代码将所有属性值都设为string,无法满足需求:

type IParse<T> = {
    [K in keyof T as K extends string ? K : never]: string // 这里需要修改,让K为'a'时类型是number
}

interface X {
    a: number
    b: string
    c: string[]
    d: number[]
}

type Result = IParse<X>

// 实际得到的类型
interface Actual {
    a: string
    b: string
    c: string
    d: string
}

// 期望得到的类型
interface Expected {
    a: number
    b: string
    c: string
    d: string
}

解决方案

通过条件类型在映射类型中根据键名动态指定值类型即可实现需求:

type IParse<T> = {
    [K in keyof T as K extends string ? K : never]: K extends 'a' ? number : string
}

interface X {
    a: number
    b: string
    c: string[]
    d: number[]
}

type Result = IParse<X>
// Result的类型符合预期:
// {
//     a: number;
//     b: string;
//     c: string;
//     d: string;
// }

说明

  • 映射部分[K in keyof T as K extends string ? K : never]用于过滤非字符串类型的键,确保只处理接口中的字符串键
  • 值类型分支K extends 'a' ? number : string实现了键名依赖的类型映射:匹配到键'a'时使用number类型,其余键统一使用string类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:05:03