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

时间:2019-01-29 23:37:28

标签: typescript

假设我有一个客户:

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,
  }
}

1 个答案:

答案 0 :(得分:1)

/**
 * 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