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

如何在TypeScript中访问嵌套对象值并实现强类型参数

解决TypeScript嵌套对象键的强类型约束问题

你当前的Section类型太宽泛,全是字符串索引,导致TypeScript无法识别first/second或者valueA/valueB这类具体键。要给第二个参数加上强类型约束,按下面的方法来:

步骤1:保留数据的具体类型

别给data指定宽泛的Section类型,让TypeScript自动推导它的结构,这样才能捕获到每个section对应的子键:

// 去掉类型标注,让TS自动推导具体结构
const data = {
  first: {
    valueA: "1234",
    valueB: "5678"
 },
 second: {
    valueA: "0000",
    valueB: "4444"
 }
}

如果一定要加类型约束,可以用const断言或者定义更精确的接口,但自动推导是最简便的方式。

步骤2:用泛型函数关联参数类型

写一个泛型函数,让第一个参数的键类型直接决定第二个参数的可选范围:

const getSection = <T extends keyof typeof data>(sectionKey: T, itemKey: keyof typeof data[T]) => {
  return data[sectionKey][itemKey];
}

这样调用时:

  • 第一个参数只能选first或second
  • 选完第一个参数后,第二个参数只能选对应section里的键(比如选first,第二个参数只能是valueA/valueB)

额外:若必须保留原Section类型

要是你一定要用Section类型约束data,可以把它改成结合具体键的精确类型:

// 定义具体的键类型
type SectionKeys = 'first' | 'second';
type ItemKeys = 'valueA' | 'valueB';
type Section = Record<SectionKeys, Record<ItemKeys, string>>;

const data: Section = {
  first: { valueA: "1234", valueB: "5678" },
  second: { valueA: "0000", valueB: "4444" }
}

// 泛型函数同样适用
const getSection = <T extends SectionKeys>(sectionKey: T, itemKey: ItemKeys) => {
  return data[sectionKey][itemKey];
}

这样就能实现完全的强类型约束,输入错误的键会直接在TypeScript中报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:07:03