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

如何在TypeScript中实现移除字符串类型指定后缀的工具类型

实现代码

你可以借助 TypeScript 4.1 以上版本支持的模板字面量类型 + 条件类型推断能力实现,代码如下:

type FooObj = {
    ASvg: any
    BSvg: any
    CSvg: any
    DSvg: any
}

// 核心实现
type WithoutSvgSuffix<T> = T extends `${infer Prefix}Svg` ? Prefix : never;

type KeyofWithoutSuffix = WithoutSvgSuffix<keyof FooObj> 
// 最终推导结果为:'A' | 'B' | 'C' | 'D',完全符合预期

原理解释

  • 匹配逻辑:${infer Prefix}Svg是模板字面量匹配规则,会匹配所有以Svg为后缀的字符串字面量,并用infer关键字捕获后缀之前的前缀部分赋值给Prefix
  • 联合类型分发:条件类型默认对联合类型有自动分发特性,当你传入keyof FooObj(本质是'ASvg' | 'BSvg' | 'CSvg' | 'DSvg'联合类型)时,每个成员会单独走匹配逻辑,匹配成功返回对应的前缀,匹配失败返回never,最终自动合并所有成功的结果,排除掉never项就得到了想要的联合类型。

如果需要适配任意后缀的通用场景,可以扩展成通用工具类型:

type RemoveSuffix<T extends string, Suffix extends string> = T extends `${infer Prefix}${Suffix}` ? Prefix : never;

// 使用效果和上面的WithoutSvgSuffix完全一致
type KeyofWithoutSuffix = RemoveSuffix<keyof FooObj, 'Svg'>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:27:01