typescript 类型脚本:从联合中删除null

iih3973s  于 2023-02-10  发布在  TypeScript
关注(0)|答案(3)|浏览(172)

给定类型:

type Foo = string | null

有没有一种方法可以创建一个新的类型,排除null

function returnSomething(input: Foo): RemoveFromUnion<Foo, null> {

  if (input === null) throw new Error('No.');
  return input;

}

或者更一般地说:

function returnSomething<T>(input: T): RemoveFromUnion<T, null> {

  if (input === null) throw new Error('No.');
  return input;

}
jhdbpxl9

jhdbpxl91#

这是相当简单的做法

type newType = Exclude<T, null>

这将从T类型中过滤空值

8fsztsew

8fsztsew2#

您正在查找Exclude实用程序类型。

type T1 = string | number | unknown[] | null;
type T2 = Exclude<T1, number | null>; // type T2 = string | unknown[]
brccelvz

brccelvz3#

顺便说一句,有内置的util类型:NonNullable .文档

type A = number | null
type B = string | undefined

type Result = NonNullable<A> // number
type Result2 = NonNullable<B> // string

它具有下一类型签名:

// old TS version
type NonNullable<T> = T extends null | undefined ? never : T

// new TS version
type NonNullable<T> = T & {}

相关问题