繁体   English   中英

打字稿:如何定义使用泛型引用对象的函数

[英]Typescript: How to define a function that references an object using generics

如何使用泛型基于对象的键定义函数。 实际用例有更多的键和值,所以我不想明确定义它。

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];
}

错误: 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]'

您需要添加一些更通用的参数:

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

TS游乐场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM