TS - 工厂fn返回的过载功能签名

时间:2017-09-05 10:02:38

标签: typescript types

我有一个高阶函数,它返回一个函数,并且, 为简洁起见,让我们想象一下这样的事情:

function factory() {
  return function baz(payload: { [key: string]: {} }): 'hello' {

    return 'hello';
  }
}

const foo = factory();

现在,foo是函数baz,它具有这样的参数签名(非常通用):

interface payload {
  [key: string] : {}
}

我需要做的是仅重载foo的签名,以获得更精确的签名(所需):

function foo(payload: {id: string}) {}

我该如何实现?

1 个答案:

答案 0 :(得分:1)

也许是这样的?

function factory<P extends { [key: string]: {}}>() {
  return function baz(payload: P): 'hello' {
    return 'hello';
  }
}

const foo = factory<{id: string}>(); // OK
const bar = factory<number>(); // Error