typescript - 如何创建第二个参数依赖于第一个参数的 Typescript 函数?

标签 typescript

给定以下数据结构


const mapA = {
  a: 1,
  b: 2,
  c: 3,
}

const mapB = {
  a: 1,
  b: 2,
}

const maps = {
  A: mapA,
  B: mapB,
}

const func = (mapName: keyof typeof maps, prop: ?) => {
  //
}

“?”中的 prop 类型应该怎么写?这样

func('A', 'c') // = 3
func('B', 'c') // throw Typescript error

我尝试了以下操作但失败了:

const func = <T extends keyof Maps>(mapName: T, prop: Maps[T]) => {
  const value = maps[mapName][prop];
}

Playground

感谢您的帮助!

最佳答案

神奇的词是映射类型和键推断。

const func = <T extends keyof Maps, K extends keyof Maps[T]>(mapName: T, prop: K): Maps[T][K] => {
  return maps[mapName][prop];
};

Playground

关于typescript - 如何创建第二个参数依赖于第一个参数的 Typescript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76008165/

相关文章:

typescript - 通过参数使两种类型不同

javascript - 有接口(interface)扩展字符串功能

javascript - 如何在 TypeScript 中安全地解构 JavaScript 对象

javascript - 如何逐行读取angular2上的csv文件

javascript - ionic 2 中的 Webpack 和 Web Workers

javascript - 如何使用 angular 8 在字段为空时禁用按钮

reactjs - typescript 使用字符串或字符串[]

html - 数据未从 Angular 7 中的 Firebase 检索

Open Layers 6 的 typescript 类型定义

typescript - 三个JS中如何动态改变顶点颜色