MOBILE-4081 types: Create OmitUnion utility type
parent
ed3d8e333b
commit
4a9549216b
|
@ -16,3 +16,32 @@
|
||||||
* Helper type to flatten complex types.
|
* Helper type to flatten complex types.
|
||||||
*/
|
*/
|
||||||
export type Pretty<T> = T extends infer U ? {[K in keyof U]: U[K]} : never;
|
export type Pretty<T> = T extends infer U ? {[K in keyof U]: U[K]} : never;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper type to omit union.
|
||||||
|
* You can use it if need to omit an element from types union.
|
||||||
|
* If you omit a value in an union with `Omit<TypeUnion, 'value'>` you will obtain
|
||||||
|
* the values which are present in both types.
|
||||||
|
* For example, you have 3 types:
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* type TypeA = { propA: boolean; propB: string; propToOmit: boolean }
|
||||||
|
* type TypeB = { propA: boolean; propToOmit: boolean }
|
||||||
|
* type TypeUnion = TypeA | TypeB
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* ```
|
||||||
|
* type Result = Omit<TypeUnion, 'propToOmit'>;
|
||||||
|
* // ^? type Result = { propA: boolean };
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* ```
|
||||||
|
* type Result = OmitUnion<TypeUnion, 'propToOmit'>;
|
||||||
|
* // ^? type Result = { propA: boolean, propB: string } | { propA: boolean }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @see https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types
|
||||||
|
*/
|
||||||
|
export type OmitUnion<T, A extends keyof T> = T extends '' ? never : Omit<T, A>;
|
||||||
|
|
Loading…
Reference in New Issue