从类型中删除未定义

Remove undefined from type

我使用 typeof 来推断函数的 return 类型,但是由于我无法调用实际函数,所以我使用了一个技巧,使用三元运算符来推断类型,但这让我具有包含 undefined 的联合类型:

function foo() {
  return { bar: 1 };
}

const fooInstance = true ? undefined : foo(); // foo() is never actually called
type FooOrUndefined = typeof fooInstance;     // {bar: number} | undefined 
type Foo = ???;                               // Should be { bar: number }

有什么方法可以从 FooOrUndefined 中删除 undefined 吗?

您将要使用 NonNullable:

type Foo = NonNullable<FooOrUndefined> // { bar: number; }

Sample

, but I also discovered that ReturnType 是实现我想要做的事情的更简洁的方法:

function foo() {
  return { bar: 1 };
}
type Foo = ReturnType<typeof foo>; // { bar: number; }

如果你只想删除 undefined 但保留 null,你可以做一个小工具:

type NoUndefined<T> = T extends undefined ? never : T;

type Foo = number | string | null | undefined;

type Foo2 = NoUndefined<Foo> // number | string | null