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

如何为嵌套对象访问键正确定义VersionKey类型?

如何为嵌套对象的层级键定义正确的TypeScript类型?

你需要通过两个键的组合从嵌套对象中获取特定层级的数据,但在定义访问嵌套对象的键的类型时遇到问题。给定如下对象结构:

const movies = {
  "Shawshank Redemption": {
    rating: 9,
    versions: {
      "Directors Cut": {
        length: 111,
      },
      Cinema: {
        length: 113,
      },
    },
  },
  "The Dark Knight": {
    release: 2008,
    versions: {
      Standard: {
        rating: 9,
        length: 113,
      },
    },
  },
};
type MovieKey = keyof typeof movies;

已定义MovieKey类型,需要为getMovieVersion方法中的VersionKey定义正确类型,同时保证类型合法性,具体实现如下:

解决方案:使用泛型关联参数类型

单独定义固定的VersionKey类型不可行,因为不同电影对应的版本键存在差异,必须让version参数的类型和传入的movie参数动态绑定。可以通过泛型实现这一约束:

// 提取整个movies对象的类型
type Movies = typeof movies;

// 用泛型K约束movie参数,让version参数的类型依赖于当前选中的电影
function getMovieVersion<K extends keyof Movies>(
  movie: K,
  version: keyof Movies[K]['versions']
) {
  return movies[movie].versions[version];
}

类型检查效果

  • 合法调用:getMovieVersion("Shawshank Redemption", "Directors Cut") 会被TypeScript认可,返回对应版本的数据
  • 非法调用:getMovieVersion("The Dark Knight", "Cinema") 会直接报错,因为"The Dark Knight"不存在"Cinema"这个版本键

这种方式能确保传入的版本键始终对应所选电影的有效版本,完全符合类型安全要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:33:17