koSakano/type-challenges

151 - Query String Parser

Opened this issue · 0 comments

type ParseQueryString<T extends string, R = {}> = T extends "" ? R : T extends `${infer S}&${infer SR}` ? [ParseQueryString<S>, ParseQueryString<SR>] extends [infer R1, infer R2] ? {[K in keyof R1 | keyof R2]: K extends keyof R1 & keyof R2 ? R2[K] extends infer R2K ? R2K extends Array<infer E> ? R1[K] extends E ? R2K : [R1[K], ...R2K] : R1[K] extends R2K ? R2K : [R1[K], R2K] : never : K extends keyof R1 ? R1[K] : K extends keyof R2 ? R2[K] : never;} : never : T extends `${infer K}=${infer V}` ? Record<K, V> : Record<T, true>