代码之家  ›  专栏  ›  技术社区  ›  Nurbol Alpysbayev

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

  •  1
  • Nurbol Alpysbayev  · 技术社区  · 6 年前

    如何将参数的属性赋给泛型?代码如下:

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

    你怎么能 T 被分配到 bar someObject ?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Hero Wanders    6 年前

    所以你希望这个参数至少有这个属性 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);