lar*_*rbo 4 typescript typescript-generics
我有这样的类型:
type City = {
name: string;
id: number | null;
};
Run Code Online (Sandbox Code Playgroud)
并想把它变成这样的类型:
type City = {
name: string;
id?: number;
};
Run Code Online (Sandbox Code Playgroud)
我已经看到很多帖子解释如何使可选类型可以为空,但我想要相反的东西。
有没有办法创建一个像OptionalNullable<T>这样处理这个问题的 TypeScript 通用函数?
这应该可以解决问题:
type PickNullable<T> = {
[P in keyof T as null extends T[P] ? P : never]: T[P]
}
type PickNotNullable<T> = {
[P in keyof T as null extends T[P] ? never : P]: T[P]
}
type OptionalNullable<T> = {
[K in keyof PickNullable<T>]?: Exclude<T[K], null>
} & {
[K in keyof PickNotNullable<T>]: T[K]
}
Run Code Online (Sandbox Code Playgroud)
我创建了两种实用程序类型,它们分别从类型中选取所有可为空的而非不可为空的属性。我们可以使用它们来构造一个新类型,其中所有可为空的属性都是可选的。我也用Excludeso来摆脱null。
它可以这样使用:
type City = {
name: string;
id: number | null;
};
type Test = OptionalNullable<City>
// {
// id?: number | undefined;
// } & {
// name: string;
// }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11076 次 |
| 最近记录: |