从类型中删除未定义
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; }
, 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
我使用 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; }
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