Skip to content

Commit d8acd1e

Browse files
committed
Added utility types for recursively making types all optional or required
1 parent 1bec6a9 commit d8acd1e

File tree

3 files changed

+71
-7
lines changed

3 files changed

+71
-7
lines changed

CHANGELOG

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
isotopes-0.x.x (2018-xx-xx)
2+
3+
* Added utility types for recursively making types all optional or required
4+
15
isotopes-0.3.1 (2018-07-30)
26

3-
* Fixed handling of undefined values in where conditions
7+
* Fixed handling of undefined values in WHERE clauses
48

59
isotopes-0.3.0 (2018-07-30)
610

src/index.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@
2626

2727
export {
2828
Isotope,
29-
IsotopeOptions
29+
IsotopeOptions,
30+
IsotopeResult
3031
} from "./isotopes"
32+
export { IsotopeClientOptions } from "./isotopes/client"
33+
export { IsotopeFormatOptions } from "./isotopes/format"
34+
export { IsotopeSelect } from "./isotopes/select"
3135
export {
32-
IsotopeClientOptions
33-
} from "./isotopes/client"
34-
export {
35-
IsotopeFormatOptions
36-
} from "./isotopes/format"
36+
DeepPartial,
37+
DeepRequired
38+
} from "./isotopes/utilities"

src/isotopes/utilities/index.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright (c) 2018 Martin Donath <martin.donath@squidfunk.com>
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a copy
5+
* of this software and associated documentation files (the "Software"), to
6+
* deal in the Software without restriction, including without limitation the
7+
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8+
* sell copies of the Software, and to permit persons to whom the Software is
9+
* furnished to do so, subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included in
12+
* all copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
17+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20+
* IN THE SOFTWARE.
21+
*/
22+
23+
/* ----------------------------------------------------------------------------
24+
* Types
25+
* ------------------------------------------------------------------------- */
26+
27+
/**
28+
* Recursively make all keys in an array type required
29+
*
30+
* @template T - Data type
31+
*/
32+
interface DeepRequiredArray<T> extends Array<DeepRequired<T>> {}
33+
34+
/* ------------------------------------------------------------------------- */
35+
36+
/**
37+
* Recursively make all keys in a type required
38+
*
39+
* @template T - Data type
40+
*/
41+
export type DeepRequired<T> =
42+
T extends any[] ? DeepRequiredArray<T[number]> :
43+
T extends {} ? {
44+
[K in keyof T]-?: DeepRequired<T[K]>;
45+
} : T
46+
47+
/**
48+
* Recursively make all keys in a type optional
49+
*
50+
* @template T - Data type
51+
*/
52+
export type DeepPartial<T> = {
53+
[P in keyof T]?: T[P] extends Array<infer U>
54+
? Array<DeepPartial<U>>
55+
: T[P] extends ReadonlyArray<infer V>
56+
? ReadonlyArray<DeepPartial<V>>
57+
: DeepPartial<T[P]>
58+
}

0 commit comments

Comments
 (0)