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

TypeScript中如何根据父级键为对象子元素指定类型

精准关联版本与选项类型的可扩展TypeScript配置方案

问题背景

需要创建如下结构的配置对象:

const config = {
    version1: {
        options: ["A", "B", "C"]
    },
    version2: {
        options: ["B", "D", "E"]
    },
    // 可扩展更多版本
}

已定义以下类型:

type VersionNames = "version1" | "version2";
type Version1Options = "A" | "B" | "C";
type Version2Options = "B" | "D" | "E";

当前使用的通用类型无法实现版本与对应选项类型的精准绑定:

type Configuration = {
    [k in VersionNames]: {
        options: Version1Options[] | Version2Options[]
    }
}

options字段为联合类型,无法约束version1只能使用Version1Options、version2只能使用Version2Options,且希望方案支持扩展,避免逐个手动定义或条件判断(实际场景为深层嵌套对象)。

解决方案

核心是通过建立版本与对应类型的映射关系,利用TypeScript的映射类型自动生成精准关联的配置结构。

1. 定义版本-选项类型映射

先创建一个类型别名,明确每个版本对应的选项类型:

type VersionOptionMap = {
    version1: Version1Options;
    version2: Version2Options;
    // 新增版本时直接添加键值对即可,例如:version3: Version3Options;
};

2. 生成精准的Configuration类型

基于VersionOptionMap,通过映射类型和索引访问类型自动生成每个版本的配置结构:

type Configuration = {
    [K in keyof VersionOptionMap]: {
        options: VersionOptionMap[K][];
    };
};

效果验证

此时Configuration会实现精准的类型关联:

  • config.version1.options被推断为Version1Options[],仅允许"A"、"B"、"C"
  • config.version2.options被推断为Version2Options[],仅允许"B"、"D"、"E"
  • 新增版本时,只需在VersionOptionMap中添加新的映射关系,Configuration会自动更新,无需修改核心类型定义

深层嵌套场景适配

对于深层嵌套的对象结构,只需扩展版本类型映射即可。例如每个版本包含options和settings字段:

// 定义各版本的深层类型
type Version1Settings = { theme: "light" | "dark" };
type Version2Settings = { theme: "system" | "custom"; size: "sm" | "md" };

// 更新版本-类型映射
type VersionTypeMap = {
    version1: {
        options: Version1Options;
        settings: Version1Settings;
    };
    version2: {
        options: Version2Options;
        settings: Version2Settings;
    };
};

// 生成深层嵌套的配置类型
type DeepConfiguration = {
    [K in keyof VersionTypeMap]: {
        [P in keyof VersionTypeMap[K]]: VersionTypeMap[K][P];
    };
};

该方案同样支持深层嵌套结构的自动类型生成,扩展性完全不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:10:29