2017-09-05 67 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