在Typescript中,是否有一种方法可以直接从联合类型中排除某些类型?

7
例如,我想从给定的联合类型中排除函数类型。
type T = number | string | VoidFunction;  // a GIVEN type

type R = ExcludeType<T, VoidFunction>;  // number | string

我发现可以通过添加一个工具函数来实现它,例如:
type T = number | string | VoidFunction;  // a GIVEN type

function f(v: T) {
  if (v instanceof Function) return undefined;
  return v;
}

type R = typeof f;  // number | string

但我认为这种方法过于复杂且难以扩展,而且我也无法在“.d.ts”文件中使用它。

有更好的方法吗?


我不确定我理解了 - 为什么Exclude对你无效?此外,以防有关联,可以查看我的答案在这里,其中展示了两种方法获取联合类型的子集 - 减法(使用Exclude)和与另一个联合类型的交集(使用&)。 - VLAZ
1个回答

7

这就是 Exclude

type R = Exclude<T, VoidFunction>;  // number | string

Playground


Exclude<Type, ExcludedUnion>

通过从Type中排除所有可分配给ExcludedUnion的联合成员来构造一个类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接