2017-09-05 66 views
0

我有返回功能的高阶函数,并且,让我们想象这样的事情:TS - 重载函数签名由厂 为简洁返回FN

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

你的意思是:'const foo = factory()as(payload:{id:string})=>'hello';'? –

回答

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 
+0

这可能适合,我希望有效载荷**必须总是**和对象'{[key:string]:{}}'。我只是想添加一种方法来描述有效载荷属性。任何想法? – Hitmands

+0

@编辑过的@Hitmands。 – Paleo