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

TypeScript泛型如何筛选接口中包含X属性的键作为入参类型

解决方案

你可以先定义一个工具类型过滤出接口I中所有值包含X属性的键,再修改函数的泛型约束即可:

// 工具类型:遍历对象的键,保留值包含X属性的键
type KeysWithPropertyX<T> = {
  [K in keyof T]: T[K] extends { X: unknown } ? K : never
}[keyof T]

interface I{
    A:{
        X:any
    }
    B:{
        Y:any
    }
    C:{
        X:any
        Y:any
    }
}

// 泛型约束替换为KeysWithPropertyX<I>
function hello<T extends KeysWithPropertyX<I>>(type:T, value:I[T]["X"]):void {
  // 你的函数逻辑
}

效果验证

  • 传入合法值正常通过类型校验:
    hello("A", 123) // 无报错
    hello("C", "text") // 无报错
    
  • 传入非法值B会触发类型错误:
    hello("B", 456) // 类型报错:类型“"B"”的参数不能赋给类型“"A" | "C"”的参数
    

如果你不想额外定义独立的工具类型,也可以直接把过滤逻辑写在泛型约束里,只是可读性稍低:

function hello<T extends {
  [K in keyof I]: I[K] extends { X: any } ? K : never
}[keyof I]>(type:T, value:I[T]["X"]):void {
  // 函数逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:42:02