MST

星途 面试题库

面试题:TypeScript模板字面量模式匹配之复杂类型处理

编写一个TypeScript类型 `ParseQueryString`,利用模板字面量模式匹配,将形如 `"key1=value1&key2=value2"` 的字符串类型解析为一个对象类型。例如输入 `"name=John&age=30"`,应输出 `{name: "John", age: "30"}`。要求处理可能出现的特殊字符转义情况,且尽可能覆盖多种边界条件。
32.3万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type ParseQueryString<S extends string> = S extends `${infer Key}=${infer Value}&${infer Rest}`
  ? {
        [K in UnescapeKey<Key>]: UnescapeValue<Value>;
    } & ParseQueryString<Rest>
  : S extends `${infer Key}=${infer Value}`
  ? {
        [K in UnescapeKey<Key>]: UnescapeValue<Value>;
    }
  : {};

type UnescapeKey<S extends string> = S extends `${infer Head}%${infer Code}${infer Tail}`
  ? `${Head}${DecodeURIComponent('%' + Code) extends infer U ? U : ''}${UnescapeKey<Tail>}`
  : S;

type UnescapeValue<S extends string> = S extends `${infer Head}%${infer Code}${infer Tail}`
  ? `${Head}${DecodeURIComponent('%' + Code) extends infer U ? U : ''}${UnescapeValue<Tail>}`
  : S;