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

TypeScript实现仅接受值为数组类型的对象键的函数

TypeScript 筛选对象中值为数组类型的键作为函数参数

要实现仅接受对象中值为数组类型的键作为参数,同时让IDE提供精准的自动提示,可以通过条件映射类型筛选符合要求的键,再约束函数参数。

步骤1:定义筛选数组类型键的工具类型

// 提取对象T中值为数组类型的所有键
type ArrayKeys<T> = {
  [K in keyof T]: T[K] extends Array<any> ? K : never;
}[keyof T];

步骤2:重写get函数

用上面的ArrayKeys<T>约束第二个参数的类型:

function get<T, Key extends ArrayKeys<T>>(container: T, key: Key) {
  return container[key];
}

测试效果

const person = {
    name: 'Amir',
    age: 25,
    favoriteFruits: ['Apple', 'Orange']
};

// 调用时IDE仅提示'favoriteFruits',符合预期
get(person, 'favoriteFruits');

// 传入非数组类型的键会直接触发类型报错
get(person, 'name'); // 类型错误:"name"不能赋值给类型"favoriteFruits"

原理说明

  • ArrayKeys<T>通过遍历对象的所有键,判断对应值是否为数组类型:符合条件的键保留原类型,不符合的设为never。
  • 最后通过[keyof T]从映射结果中提取所有有效的键(never类型会被自动排除),以此约束函数的Key类型,实现精准的参数提示和类型校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:55:19