diff options
author | 8rain1ag <asleeppiano@outlook.com> | 2020-02-05 00:13:18 +0300 |
---|---|---|
committer | 8rain1ag <asleeppiano@outlook.com> | 2020-02-05 00:13:18 +0300 |
commit | 5d526501aba7b338a6ff6ac64c21b3bf1d38db30 (patch) | |
tree | 119b31ebb3c0fde7fb7da5d17e4e1f9f47a999bd /assets/node_modules/type-fest/source/set-required.d.ts |
Initial commit
Diffstat (limited to 'assets/node_modules/type-fest/source/set-required.d.ts')
-rw-r--r-- | assets/node_modules/type-fest/source/set-required.d.ts | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/assets/node_modules/type-fest/source/set-required.d.ts b/assets/node_modules/type-fest/source/set-required.d.ts new file mode 100644 index 0000000..2572bc1 --- /dev/null +++ b/assets/node_modules/type-fest/source/set-required.d.ts @@ -0,0 +1,32 @@ +/** +Create a type that makes the given keys required. The remaining keys are kept as is. The sister of the `SetOptional` 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 required. + +@example +``` +import {SetRequired} from 'type-fest'; + +type Foo = { + a?: number; + b: string; + c?: boolean; +} + +type SomeRequired = SetRequired<Foo, 'b' | 'c'>; +// type SomeRequired = { +// a?: number; +// b: string; // Was already required and still is. +// c: boolean; // Is now required. +// } +``` +*/ +export type SetRequired<BaseType, Keys extends keyof BaseType = keyof BaseType> = + // Pick just the keys that are not required from the base type. + Pick<BaseType, Exclude<keyof BaseType, Keys>> & + // Pick the keys that should be required from the base type and make them required. + Required<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; |