我想要實作的是根據“rest”引數中提供的引數數量,鍵入一個函式的深度嵌套 ReturnType。例如,如果我們有:
getFormattedDates(
dates: Date[],
...rest: string[] // ['AAA', 'BBB', 'CCC', etc...]
): Record<string, Record<string, Record<string,etc...>>>
最后一個嵌套物件的型別應該是Record<string, Date[]>,而如果沒有第二個引數,則回傳型別應該是Date[]。
到目前為止,我嘗試過谷歌搜索各種東西,但我無法掌握這樣的型別,我也想了解它背后的邏輯。
這是我問的第一個問題,所以我希望它足夠明確。:)
希望有人可以對這個問題有所了解。謝謝!
uj5u.com熱心網友回復:
您可以遞回地構建型別:
type ToRecord<T> = T extends [string, ...infer Rest]
? Record<string, ToRecord<Rest>>
: Date[]
declare function getFormattedDates<T extends string[]>(
dates: Date[],
...rest: T // ['AAA', 'BBB', 'CCC', etc...]
): ToRecord<T>
const p0 = getFormattedDates([]) // Date[]
const p1 = getFormattedDates([], 'AAA') // Record<string, Date[]>
const p3 = getFormattedDates([], 'AAA', 'BBB', 'CCC') // Record<string, Record<string, Record<string, Date[]>>>
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383750.html
上一篇:在沒有型別的情況下呼叫型別函式
