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

如何自动生成包含全部keyList元素的TypeScript对象数组?

问题描述

现有 TypeScript 代码:

type keyList = 'a' | 'b' | 'c'
type valueList = 'x' | 'y' | 'z'

想要创建一个对象数组,要求如下:

const arrayOfObjects:{key:keyList, value:valueList}[] = [
 {
   key:'a',
   value:'x'
 },...

数组中的对象由 keyList 和 valueList 的元素组合而成,且 keyList 的每个元素在数组中至少出现一次,对应 valueList 的任意值。目前有近100个key,手动创建该数组十分繁琐,请问有没有自动生成的方法?

解决方法

可以通过运行时生成数组结合TypeScript类型约束来实现,无需手动逐个编写:

  • 第一步:把TypeScript类型转化为运行时可用的数组
    TypeScript类型仅存在于编译阶段,无法直接在运行时获取,所以需要先定义与类型对应的实际数组,再同步类型定义:

    // 运行时可用的key集合
    const keys = ['a', 'b', 'c'] as const;
    // 运行时可用的value集合
    const values = ['x', 'y', 'z'] as const;
    
    // 基于运行时数组同步类型定义,确保类型和实际值一致
    type keyList = typeof keys[number];
    type valueList = typeof values[number];
    
  • 第二步:生成满足要求的数组
    根据需求不同,有三种常见生成方式:

    1. 基础生成:每个key至少出现一次,对应默认value(比如第一个value)
    const baseArray = keys.map(key => ({ key, value: values[0] })) as { key: keyList, value: valueList }[];
    
    1. 全组合生成:生成key和value的所有可能组合(自动包含每个key至少一次)
    const fullCombinationArray = keys.flatMap(key => 
      values.map(value => ({ key, value }))
    ) as { key: keyList, value: valueList }[];
    
    1. 自定义生成:允许指定部分key的特定value,其余用默认值
    function generateKeyArray(customPairs?: Partial<Record<keyList, valueList>>) {
      return keys.map(key => ({
        key,
        value: customPairs?.[key] ?? values[0]
      })) as { key: keyList, value: valueList }[];
    }
    
    // 使用示例:指定a的value为y,其余key用默认的x
    const customArray = generateKeyArray({ a: 'y' });
    

这样不管key数量有多少,只需要维护keys和values两个数组,就能自动生成符合要求的对象数组,彻底省去手动编写的麻烦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:06:36