我需要声明一个类型,以便从其属性类型中删除未定义的类型。

假设我们有:

type Type1{
  prop?: number;
}

type Type2{
  prop: number | undefined;
}

type Type3{
  prop: number;
}

我需要定义一个称为NoUndefinedField<T>的通用类型,以便NoUndefinedField<Type1>给出与Type3相同的类型,并且给出与NoUndefinedField<Type2>相同的类型。

我试过了
type NoUndefinedField<T> = { [P in keyof T]: Exclude<T[P], null | undefined> };

但是它仅适用于Type2

最佳答案

现在还内置了NonNullable类型:

type NonNullable<T> = Exclude<T, null | undefined>;  // Remove null and undefined from T
https://www.typescriptlang.org/docs/handbook/utility-types.html#nonnullablet

09-30 16:23
查看更多