diff options
Diffstat (limited to 'client/node_modules/type-fest/source/set-optional.d.ts')
-rw-r--r-- | client/node_modules/type-fest/source/set-optional.d.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/client/node_modules/type-fest/source/set-optional.d.ts b/client/node_modules/type-fest/source/set-optional.d.ts new file mode 100644 index 0000000..3539899 --- /dev/null +++ b/client/node_modules/type-fest/source/set-optional.d.ts @@ -0,0 +1,34 @@ +import {Except} from './except'; + +/** +Create a type that makes the given keys optional. The remaining keys are kept as is. The sister of the `SetRequired` type. + +Use-case: You want to define a single model where the only thing that changes is whether or not some of the keys are optional. + +@example +``` +import {SetOptional} from 'type-fest'; + +type Foo = { + a: number; + b?: string; + c: boolean; +} + +type SomeOptional = SetOptional<Foo, 'b' | 'c'>; +// type SomeOptional = { +// a: number; +// b?: string; // Was already optional and still is. +// c?: boolean; // Is now optional. +// } +``` +*/ +export type SetOptional<BaseType, Keys extends keyof BaseType = keyof BaseType> = + // Pick just the keys that are not optional from the base type. + Except<BaseType, Keys> & + // Pick the keys that should be optional from the base type and make them optional. + Partial<Pick<BaseType, Keys>> extends + // If `InferredType` extends the previous, then for each key, use the inferred type key. + infer InferredType + ? {[KeyType in keyof InferredType]: InferredType[KeyType]} + : never; |