我想使用通用函式作為引數。但是,我找不到如何實體化這種型別。這是一個簡單的示例,我希望它可以作業:
function foo(a: number, f: <U>(a: number) => U) {
f(a) // removed the return to make the example simpler
}
function bar(a: number) : number {
return 2*a
}
foo(8, bar);
事情是,我得到這個錯誤:
'(a: number) => number' 型別的引數不能分配給 '(a: number) => U' 型別的引數。型別“數字”不可分配給型別“U”。“U”可以用與“數字”無關的任意型別實體化。
最后一部分對我來說似乎特別奇怪,因為在這種情況下 U 不應該是數字以外的任何東西。如何將 U 實體化為數字?有特定的語法嗎?
uj5u.com熱心網友回復:
我不太確定您要在這里實作什么,但移到U前面將解決此問題:
function foo<U>(a: number, f: (a: number) => U) {
return f(a)
}
function bar(a: number) : number {
return 2*a
}
foo(8, bar);
如果你想在函式宣告中引入泛型型別,你應該把它們放在函式名之后。當函式被呼叫時,TypeScript 會嘗試推斷正確的型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/468680.html
