我確信這是個重復的問題,但我卻找不到它。我有一個函式介面,它接受一個型別引數:
interface A<T> {
(foo: T): void。
}
而我想把滿足該介面的箭頭函式分配給一個變數:
const x: A = <T>(foo: T) => { console.log(foo) };
但這當然不能編譯,因為A需要型別引數。這也失敗了:
const x: A<T> = <T>(foo: T) => { console.log(foo) };
因為型別變數T在賦值的LH上不在范圍內。我究竟該如何宣告呢?
uj5u.com熱心網友回復:
這是一個通用型別,它包括一個使用通用引數的函式:
interface A<T> { (foo: T): void }
這是一個非通用型別,包括一個通用函式:
interface A { <T> (foo: T): void }
你想要這個。
這里的關鍵是,A并沒有為T執行任何型別。這是在函式被呼叫時完成的,這就是為什么它需要在函式宣告中,而不是在介面或型別別名中。
而且我個人認為,如果你使用type而不是interface,這將更加清晰。
type A = <T>(foo: T) => void
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318620.html
標籤:
