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

如何实现FilterIfContains类型?基于字符存在过滤联合类型使AlphaFoo为'foo'

实现FilterIfContains类型

我们可以利用TypeScript的条件类型和模板字面量类型实现需求,核心逻辑是逐个检查联合类型成员是否包含指定子串,仅保留不包含的成员:

type Foo = 'foo' | 'bar1' | '213'
type Predicate = '1'
type FilterIfContains<Element, Predicate extends string> = Element extends `${infer _Start}${Predicate}${infer _End}` ? never : Element;
type AlphaFoo = FilterIfContains<Foo, Predicate>; // 结果为'foo'

代码说明

  • 通过Element extends ${infer _Start}${Predicate}${infer _End}``判断当前成员是否包含Predicate子串:
    • 若匹配(即包含目标子串),返回never将该成员从联合类型中排除
    • 若不匹配,返回原成员保留下来
  • TypeScript会自动对联合类型做分发条件类型处理,遍历Foo的每个成员逐一检查,最终只留下不包含'1'的'foo'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:04:55