typescript - 如何在 TypeScript 中访问对象键的键?
问题描述
我正在尝试创建一个函数,该函数可以访问另一个对象内部的对象内部的键。
我一直在阅读 TS 文档,但我相信我没有在我的函数上使用正确的泛型,例如:
interface A {
abc: number
acd: number
}
interface B {
bcd: number
bde: number
}
interface C {
cde: number
cef: number
}
interface Data {
a: A
b: B
c: C
}
const data: Data = {
a: {
abc: 1,
acd: 2
},
b: {
bcd: 3,
bde: 4
},
c: {
cde: 5,
cef: 6
}
}
const getItem = <T extends keyof Data, K extends keyof T>(
category: T,
item: K
) => {
console.log(data[category][item]) // ERROR: Type 'K' cannot be used to index type 'Data[T]'.ts(2536)
}
感谢您的帮助 :)
解决方案
您的问题是您不想K
索引T
(它本身就是一个键类型),而是Data
索引 at 的属性T
。要使用类型对象的键P
来表示属性的类型O
,您需要使用括号表示法的查找(或索引访问)类型O[P]
: 。Data
在您的情况下,类型索引处类型对象的属性T
具有 type Data[T]
。所以K
不应该扩展T
但是Data[T]
:
const getItem = <T extends keyof Data, K extends keyof Data[T]>(
category: T,
item: K
) => {
console.log(data[category][item]);
}
好的,希望有帮助;祝你好运!
推荐阅读
- javascript - 如何通过名称在 js 中设置元素的 ID?
- php - 使用 PHP 会话更改文本颜色不起作用
- r - 如何用零替换零之前的 2 个值和零之后的 2 个值
- python - 如何使用 LSTM 输入具有 128 个特征的 100 个时间步长和具有 128 个特征的 19000 个时间步长的输出
- c++ - 字符串中元音的数量 C++
- visual-studio-code - 如何在 Visual Studio Code 中关闭信息弹出窗口
- javascript - 如何在现有的 Javascript 对象中添加具有值的动态键?
- python - 在 Odoo 9 的编辑模式下,复选框上使用 Onchange 装饰器的方法无法正常工作
- python - 在评估多个列表的 for 循环中返回布尔值
- javascript - 如何使用移动 gps 让 Dark Sky API 工作