2017-08-17 125 views
0
在傳遞一個泛型函數作爲回調

我想要的參數的類型信息保存到一個回調,在回調是一個通用的:在打字稿

function Foo<Template>(argument: Template) { 
    // Do something with argument 
} 

function Bar(callback: Function) { 
    callback('something') 
} 

let x = Bar(Foo<String>) 

這看起來並不像有效打字稿語法。任何方式來做到這一點?

+0

你可以做'let x = Bar(Foo)',但我不確定你想要完成什麼。函數'Foo'採用泛型類型參數,但不需要,因爲它沒有做任何特殊的處理。 「酒吧」似乎不在乎它需要什麼樣的功能。也許你可以用更激勵的用例來充實這個例子嗎? – jcalz

回答

0

Function是任何功能。嘗試指定回調。

function Foo<Template>(argument: Template) { 
    // Do something with argument 
} 

function Bar(callback: { (argument: string) }) { 
    callback('something') 
} 

let x = Bar(Foo); 
0

在這裏擴大羅德里戈的答案。如果你有一個通用的函數:

function doSomething<T>(t: T): void { 
    console.log("oh " + t); 
} 

您可以如下定義函數的類型:

type Handler = <T>(t: T) => void; 

然後你可以使用類型Handler作爲函數參數:

function thisFirst(callback: Handler) { 
    callback<string>('boink'); 
} 

thisFirst(doSomething)