假設我有這樣的函式型別:
type Fn = (a: number, b: string, c: boolean) => void
我想創建一個洗掉最后一個引數的新型別,我該怎么做?
type NewFn = RemoveLastParameter<Fn>
預期型別NewFn:
type NewFn = (a: number, b: string) => void
uj5u.com熱心網友回復:
我想你想要這樣的東西:
type Pop<T extends any[]> = T extends [...infer U, any] ? U : never
type RemoveLastParameter<T extends (...args: any[]) => any> =
(...args: Pop<Parameters<T>>) => ReturnType<T>
這Pop是一種型別,它將除元組的最后一個成員之外的所有成員作為U然后回傳U。
然后RemoveLastParameter簡單地接受任何函式型別并使用函式Parameters Popped 構造一個新的函式型別。
證明:
type Fn = (a: number, b: string, c: boolean) => void
type NewFn = RemoveLastParameter<Fn>
// (a: number, b: string) => void
declare const newFn: NewFn
newFn(1, 'abc') // works
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477938.html
標籤:打字稿
上一篇:Typescriptdotenv在被變數訪問時回傳未定義
下一篇:SolidJS中的條件樣式
