如何在TypeScript中用动态变量创建字符串字面量联合类型?
实现方法
要把路径数组转换为带动态段占位符的字符串字面量联合类型,按以下步骤操作即可:
1. 保留数组元素的字面量类型
给路径数组添加as const断言,让TypeScript保留每个元素的具体字符串字面量类型,避免被推断为宽泛的string类型:
const paths = ['create/{id}', 'delete/{ticketId}', 'get-all'] as const;
2. 定义类型工具替换动态段
创建一个模板字符串类型工具,递归匹配并替换路径中{xxx}格式的动态变量为${string}:
type ReplaceDynamicSegments<T extends string> = T extends `${infer Prefix}/{${infer _}}${infer Suffix}` ? `${Prefix}/${string}${ReplaceDynamicSegments<Suffix>}` : T;
这个类型支持处理多段动态变量的场景,比如"a/{b}/c/{d}"会被转换为"a/${string}/c/${string}"。
3. 生成目标联合类型
通过typeof paths[number]获取数组元素的字面量联合类型,传入上述类型工具后得到最终结果:
type BackEndPaths = ReplaceDynamicSegments<typeof paths[number]>; // 最终类型:"create/${string}" | "delete/${string}" | "get-all"
内容的提问来源于stack exchange,提问作者nemo
相关产品推荐
相关产品推荐

