我定義了以下型別:
type MyType = <T>(a: string, b: Record<string, MyFunction<T>>) => T
type MyFunction<T> = () => T
我想創建另一種型別 ( MyType2),它采用相同的引數但回傳void.
我不希望對兩者使用相同的型別并讓它回傳T | void,因為一個函式必須回傳T,一個函式必須回傳void。
如何以 DRY 的方式使用 Typescript 實作這一目標?
我確信這是可能的,但我想不通。
uj5u.com熱心網友回復:
Parameters您可以使用helper 和 spread 語法在函式中重用引數型別:
type MyType2 = (...args: Parameters<MyType>) => void
請注意,這會導致函式型別具有一個unknown而不是具有型別引數的泛型函式型別:
(a: string, b: Record<string, MyFunction<unknown>>) => void
在這種特定情況下,這可能無關緊要;我不確定是否有一種通用的方法可以輸出另一個具有自己型別引數的通用函式型別,但我懷疑沒有,因為 Typescript 不支持更高種類的型別。但是,有一種方法可以使兩個函式都通用而無需重復太多代碼,方法是將引數單獨定義為通用元組型別:
type MyParameters<T> = [a: string, b: Record<string, MyFunction<T>>]
type MyType = <T>(...args: MyParameters<T>) => T
type MyType2 = <T>(...args: MyParameters<T>) => void
游樂場鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/428691.html
標籤:打字稿
下一篇:如何回傳傳入的型別的嵌套型別
