有没有一种方法可以从联合类型中删除一些选项来创建新类型?

时间:2019-07-04 09:04:17

标签: typescript

让我们说我们拥有

type U = A | B | C

我们需要不带某些选项的U型

function f<T option U>(u: U): U without T {...}

我们该如何表达

  1. U的类型为union
  2. T是U的选项
  3. 返回的类型类似于U,但是没有某些选择

2 个答案:

答案 0 :(得分:0)

是的,使用从标准库中排除。

type U = 'a' | 'b' | 'c';
type nonA = Exclude<U, 'a'>; // 'b' | 'c'

为了您的功能

function f<T extends U>(u: U): Exclude<U,T> {...}

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#conditional-types

答案 1 :(得分:0)

100%工作示例

function withoutType<U, T extends U>(u: U) {
  return u as Exclude<U, T>;
}

type Union = string | number | Function;
let x = 5;
let y = withoutType<Union, Function>(x); // let x: string | number;