指定泛型类型之间的关系

时间:2019-07-01 13:17:25

标签: typescript

type t = {
    a:{
        c:number
    },
    b:{
        d:boolean
    }
    //...
}

function f1<Section extends {[key:string]:{}},Key extends string>(param1:Key,param2:Section[Key]){}

f1<t,'a'>('a',{c:1})

我将在SectionKey泛型类型之间指定一种关系,以使Keykeyof T(就像我所做的那样)但是让打字稿从用户指定的第一个参数开始输入Key类型。

因此,我想改写这一行:

f1<t>('a',{c:1})

我该怎么做才能使其正常工作?

1 个答案:

答案 0 :(得分:2)

不幸的是,在让编译器推断其余参数时,您不能仅指定一些类型参数,这是不支持的(有人提议支持部分参数推断,但似乎它不会像现在这样时间很快)。

做事的唯一方法是使用咖喱函数方法:

type t = {
    a: {
        c: number
    },
    b: {
        d: boolean
    }
    //...
}

function f1<Section extends { [key: string]: {} }>() {
    return function <Key extends string>(param1: Key, param2: Section[Key]) { }
}

f1<t>()('a', { c: 1 })