[英]Typescript: How to define a function that references an object using generics
How does one define a function based on keys of an object using generics.如何使用泛型基于对象的键定义函数。 The actual use case has more keys and values so I prefer not to define it explicitly.
实际用例有更多的键和值,所以我不想明确定义它。
const obj = {
a: {
1: 1,
2: 2,
3: 3,
},
b: {
1:1,
2:2,
4:4
},
};
// My best attempt
const fn = <T extends keyof typeof obj>(key1: T, key2: keyof T) => {
return obj[key1][key2];
}
Error: Type 'keyof T' cannot be used to index type '{ a: { 1: number; 2: number; 3: number; }; b: { 1: number; 2: number; 4: number; }; }[T]'
错误:
Type 'keyof T' cannot be used to index type '{ a: { 1: number; 2: number; 3: number; }; b: { 1: number; 2: number; 4: number; }; }[T]'
Type 'keyof T' cannot be used to index type '{ a: { 1: number; 2: number; 3: number; }; b: { 1: number; 2: number; 4: number; }; }[T]'
You need to add some more generic parameters:您需要添加一些更通用的参数:
const obj = {
a: {
1: 1,
2: 2,
3: 3,
},
b: {
1:1,
2:2,
4:4
},
};
const fn = <O, T extends keyof O, U extends keyof O[T]>(o: O, key1: T, key2: U) => {
return o[key1][key2];
}
fn(obj, 'a', 1) // ok
fn(obj, 'a', 6) // error
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.