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

使用双泛型键关联数据子集时子键类型解析为any的问题咨询

使用双泛型键关联数据子集时子键类型解析为any的问题咨询

嗨各位TypeScript大神,最近在写项目的时候碰到一个类型推断的坑,折腾了半天没搞定,来求助一下!

先给大家展示下我的数据结构:

import { ParasiteDescription, LookBackDescription } from '@/movies/static';
import type { MovieGenre, MovieDescription } from '@/movies/types';

const movies = {
  drama: {
    parasite: {
      description: ParasiteDescription,
      director: 'Bong Joon Ho',
    }
  },
  animation: {
    'Look Back': {
      description: LookBackDescription,
      director: 'Tatsuki Fujimoto'
    }
  },
  comedy: {
    'The Grand Budapest Hotel': {
      description: 'A whimsical tale about a famous hotel concierge',
      director: 'Wes Anderson'
    }
  }
};

我想要实现一个函数,传入电影类型(比如drama)和对应类型下的电影键名(比如parasite),就能返回对应的电影数据。最开始我写了这样的泛型函数:

function getMovie<G extends keyof typeof movies, M extends keyof typeof movies[G]>(genre: G, movieKey: M): MovieDescription {
  return movies[genre][movieKey];
}

但问题来了——当我调用这个函数的时候,第二个参数movieKey的类型总是被解析成any,或者说没办法根据第一个参数的genre来自动约束可选值。比如我传入genre: 'drama'时,movieKey应该只能选'parasite'才对,但现在编辑器根本不会给出正确的提示,甚至传个不存在的键也不会报错。

我试过调整泛型的写法,比如把两个泛型关联起来,但好像没找对路子。有没有大佬能指点一下,怎么才能让TypeScript正确关联这两个参数的类型,根据第一个genre的类型来限制第二个movieKey的可选范围呀?

备注:内容来源于stack exchange,提问作者corvid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:42:57