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

如何限制函数仅接受对应属性为Array类型的keyof参数?

解决TypeScript函数参数限制为数组类型键的问题

要实现仅允许传入对应属性为数组类型的键,你可以通过条件类型筛选目标键,具体实现如下:

1. 定义筛选数组键的工具类型

先写一个工具类型,专门提取对象类型中属性为数组的键:

type ArrayKeys<T> = {
  [K in keyof T]: T[K] extends Array<any> ? K : never
}[keyof T]

这个类型会遍历对象T的所有键:

  • 若当前键对应的属性是数组类型,保留该键
  • 否则将其设为never(会被自动排除)
    最后通过[keyof T]提取所有有效键。

2. 修改getKey函数的类型约束

把函数的key参数类型替换为上面定义的ArrayKeys<T>,同时优化返回值类型以保证类型安全:

// 你的原始类型定义
type TestType = {
    arrayKey: Array<number>,
    notArrayKey: number
}

// 筛选数组键的工具类型
type ArrayKeys<T> = {
  [K in keyof T]: T[K] extends Array<any> ? K : never
}[keyof T]

// 优化后的getKey函数
const getKey = <T>(object: T, key: ArrayKeys<T>): T[typeof key] => {
    return object[key]
}

// 测试验证
getKey({} as TestType, 'arrayKey') // 正常通过,返回类型为number[]
getKey({} as TestType, 'notArrayKey') // 直接报错,符合预期

额外优化

如果需要兼容只读数组(ReadonlyArray),可以调整工具类型的判断条件:

type ArrayKeys<T> = {
  [K in keyof T]: T[K] extends Array<any> | ReadonlyArray<any> ? K : never
}[keyof T]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:54:37