如何从TypeScript联合类型X中排除所有函数类型,使Y为string?
如何实现过滤联合类型中函数类型的TypeScript工具类型
可以通过条件类型实现该需求,利用TypeScript对联合类型的自动分发特性,逐个判断并排除函数类型成员:
type Something<T> = T extends Function ? never : T; // 验证示例 type X = (() => void) | (() => number) | string; type Y = Something<X>; // 最终类型为string
原理说明
- TypeScript的条件类型会自动遍历联合类型的每一个成员,逐一进行判断
- 当成员属于
Function子类型(各类函数类型)时,返回never——never在联合类型中会被自动忽略 - 非函数类型的成员会被保留,最终得到过滤后的目标类型
内容的提问来源于stack exchange,提问作者kennarddh
相关产品推荐
相关产品推荐

