如何处理具有不再可为空的可为空类型的接口



假设我有一个客户:

interface Customer {
  name: string,
  age: number | null
}

但我遍历所有客户并过滤掉年龄的可空值。

如果我现在知道此字段不为空,我不希望通过我的代码库进行空检查。

所以我必须创建一个新类型。

interface CustomerAgeNotNull {
}

有没有更简单的方法来维护和管理这种类型的接口?我可以想象任何接口都有 n 个接口。

更新,尝试了以下内容:

type ExcludePropType<T, R> = {
  [k in keyof T]: Exclude<T[k], R>
}
type Customer = {
  name: string,
  age: number | null,
  dolphin: string | null
}
type CustomerAgeNotNull = ExcludePropType<Customer, null>
const v = function (): CustomerAgeNotNull {
  return {
    name: 'Thomas', 
    age: 12,
    dolphin: null,
  }
}
/**
 * Exclude type R from properties in T.
 */
export type ExcludePropType<T, R> = {
  [k in keyof T]: Exclude<T[k], R>
}

用法:

type CustomerAgeNotNull = ExcludePropType<Customer, null>

更新:

这需要启用strictNullCheckstrict的一部分)。

如果没有strickNullCheck,则类型 stringnumber 包括 null 。因此,无法从类型中排除null

最新更新