假设我有一个客户:
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,
}
}
答案 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>
更新:
这需要启用strictNullCheck
(strict
的一部分)。
在没有strickNullCheck
的情况下,类型string
和number
包括null
。
因此,不可能从类型中排除null
。