You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中将字符串URL转换为对象类型?

如何在TypeScript中将字符串URL转换为包含所有路径段的对象类型

你的问题出在原类型仅提取了/后的整个字符串作为单一键,并未拆分多路径中的每个分段。要实现将/path/path2这类URL转换为包含path和path2属性的对象,需要递归拆分路径中的每个分段:

正确的类型定义

// 递归拆分路径字符串为单个分段的联合类型
type SplitPath<T extends string> = 
  T extends `${infer First}/${infer Rest}` 
    ? First | SplitPath<Rest> 
    : T extends "" ? never : T;

// 处理带前置/的URL,生成包含所有路径段的对象类型
type TUrl<T extends string> = 
  T extends `/${infer Path}` 
    ? { [K in SplitPath<Path>]: string } 
    : never;

测试示例

// 单路径场景
const url1 = "/path" as const;
const obj1 = {} as TUrl<typeof url1>;
obj1.path; // 类型为string,正常访问

// 多路径场景
const url2 = "/path/path2" as const;
const obj2 = {} as TUrl<typeof url2>;
obj2.path; // 正常访问
obj2.path2; // 正常访问

// 多级路径同样支持
const url3 = "/user/profile/settings" as const;
const obj3 = {} as TUrl<typeof url3>;
obj3.user; // 正常
obj3.profile; // 正常
obj3.settings; // 正常

关键说明

  • SplitPath类型通过条件递归,将path/path2这类字符串拆分为"path" | "path2"的联合类型;
  • TUrl类型先提取/后的路径部分,再将拆分后的每个路径段作为对象的键,值类型统一设为string;
  • 必须使用as const让TypeScript保留字符串的字面量类型,否则变量会被推断为宽泛的string类型,导致路径拆分失效。

内容的提问来源于stack exchange,提问作者Gustiano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:38:26