我有一个高阶函数,它返回一个函数,并且, 为简洁起见,让我们想象一下这样的事情:
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}) {}
我该如何实现?
答案 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