Version: 0.1.00.2.00.3.00.3.10.4.00.4.10.5.00.5.10.5.20.6.00.7.00.7.10.8.00.8.10.9.00.10.00.11.00.12.00.13.00.13.10.14.00.15.00.15.10.16.00.17.00.18.00.18.10.19.00.20.00.20.10.20.20.21.00.21.10.21.20.21.31.0.01.0.11.0.21.1.01.1.11.1.21.1.31.2.01.2.11.2.21.2.31.3.01.4.02.0.02.1.02.2.02.3.02.3.12.3.22.3.32.3.42.4.02.5.02.5.12.5.22.5.32.5.42.6.02.7.02.8.02.9.02.10.02.11.02.11.12.11.22.12.02.12.12.12.22.13.02.13.12.14.02.15.02.15.12.16.02.17.02.18.02.18.12.19.03.0.03.1.03.2.03.3.03.4.03.5.03.5.13.5.23.5.33.5.43.5.53.5.63.5.73.6.03.6.13.7.03.7.13.7.23.8.03.9.03.10.03.11.03.11.13.12.03.13.03.13.14.0.04.1.04.2.04.3.04.3.14.3.24.3.34.4.04.5.04.6.04.7.04.7.14.8.04.8.14.8.24.8.34.9.04.10.04.10.14.10.24.10.34.11.04.11.14.12.04.13.04.13.14.14.04.15.04.16.04.17.04.18.04.18.14.18.24.18.34.19.04.20.04.20.14.21.04.22.04.22.14.23.04.24.04.25.04.26.04.26.1
/**
Create a type that makes the given keys non-nullable, where the remaining keys are kept as is.
If no keys are given, all keys will be made non-nullable.
Use-case: You want to define a single model where the only thing that changes is whether or not some or all of the keys are non-nullable.
@example
```
import type {SetNonNullable} from 'type-fest';
type Foo = {
a: number | null;
b: string | undefined;
c?: boolean | null;
}
type SomeNonNullable = SetNonNullable<Foo, 'b' | 'c'>;
// type SomeNonNullable = {
// a: number | null;
// b: string; // Can no longer be undefined.
// c?: boolean; // Can no longer be null, but is still optional.
// }
type AllNonNullable = SetNonNullable<Foo>;
// type AllNonNullable = {
// a: number; // Can no longer be null.
@category Object
*/
export type SetNonNullable<BaseType, Keys extends keyof BaseType = keyof BaseType> = {
[Key in keyof BaseType]: Key extends Keys
? NonNullable<BaseType[Key]>
: BaseType[Key];
};