假设我有一个客户:
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>
更新:
这需要启用strictNullCheck
(strict
的一部分)。
如果没有strickNullCheck
,则类型 string
和 number
包括 null
。因此,无法从类型中排除null
。