泛型类型作为接收参数的属性

时间:2018-09-02 00:01:51

标签: typescript

如何将参数的属性分配给泛型?这是代码:

const foo = <T = ???someObject.bar???>(someObject: {[string]: any}): T => {
    return someObject.bar
}

如何将T分配给bar的{​​{1}}属性?

1 个答案:

答案 0 :(得分:1)

因此,您希望参数至少具有属性bar,对吗? 这意味着它是

的子类型
interface WithBar<T> {
    bar: T
}

使用此方法,您可以通过以下方式编写函数:

const foo = <T>(someObject: WithBar<T>): T => {
    return someObject.bar
}

为避免引入人工WithBar类型,请直接编写

const foo = <T>(someObject: { bar: T }): T => {
    return someObject.bar
}

您现在可以通用使用它:

const barFoo1 = { bar: "asdf", foo: "fdsa"};
const myBar1: string = foo(barFoo1);

const barFoo2 = { bar: 123, foo: 321};
const myBar2: number = foo(barFoo2);