type-plus 4.13.0 → 4.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/cjs/utils/index.d.ts +20 -1
- package/cjs/utils/index.d.ts.map +1 -1
- package/cjs/utils/index.spec.js.map +1 -1
- package/esm/utils/index.d.ts +20 -1
- package/esm/utils/index.d.ts.map +1 -1
- package/esm/utils/index.spec.js.map +1 -1
- package/package.json +1 -1
- package/ts/utils/index.ts +21 -1
package/README.md
CHANGED
|
@@ -380,7 +380,8 @@ JSONTypes.get<string>(someJson, 'a', 'b', 1, 'c') // miku
|
|
|
380
380
|
- `BNotA<A, B>`: flip of `ANotB`
|
|
381
381
|
- `as<T>(subject)`: assert `subject` as `T`. Avoid ASI issues such as `;(x as T).abc`
|
|
382
382
|
- `asAny(subject)`: assert `subject` as `any`. Avoid ASI issue such as `;(x as any).abc`
|
|
383
|
-
- `EitherAnd<A, B, [C, D]>`: combines 2 to 4 types as `A | B | (A & B)`. This is useful for combining options.
|
|
383
|
+
- `EitherAnd<A, B, [C, D]>`: combines 2 to 4 types as `A | B | (A & B)`. This is useful for combining options. **Deprecated**. Renamed to `EitherOrBoth`.
|
|
384
|
+
- `EitherOrBoth<A, B, [C, D]>`: combines 2 to 4 types as `A | B | (A & B)`. This is useful for combining options.
|
|
384
385
|
- `Except<T, K>`: Deprecated. Same as `Omit<T, K>`.
|
|
385
386
|
- `ExcludePropType<T, U>`: excludes type `U` from properties in `T`.
|
|
386
387
|
- `KeyofOptional<T>`: `keyof` that works with `Record<any, any> | undefined`.
|
package/cjs/utils/index.d.ts
CHANGED
|
@@ -19,5 +19,24 @@ export type { Widen } from './Widen.js';
|
|
|
19
19
|
* config({ src: 'src', minify: false })
|
|
20
20
|
* config({ minify: false }) // INVALID
|
|
21
21
|
*/
|
|
22
|
-
export declare type
|
|
22
|
+
export declare type EitherOrBoth<A, B, C = void, D = void> = C extends void ? A | B | A & B : (D extends void ? A | B | C | A & B | A & C | B & C | A & B & C : A | B | C | D | A & B | A & C | A & D | B & C | B & D | C & D | A & B & C | A & B & D | A & C & D | B & C & D | A & B & C & D);
|
|
23
|
+
/**
|
|
24
|
+
* `A` | `B` | `A & B`.
|
|
25
|
+
* Supports up to 4 types, and it is composable.
|
|
26
|
+
* This is useful when you want to compose multiple options together,
|
|
27
|
+
* while preserving their required field and structure.
|
|
28
|
+
* If the types overlaps each other, you may run into some corner cases.
|
|
29
|
+
* But in general usage it should work as expected.
|
|
30
|
+
* @deprecated renamed to `EitherOrBoth`
|
|
31
|
+
* @example
|
|
32
|
+
* type A = { src: string, minify?: boolean }
|
|
33
|
+
* type B = { logLevel: number }
|
|
34
|
+
* function config(options: EitherAnd<A, B>) { }
|
|
35
|
+
*
|
|
36
|
+
* config({ logLevel: 1 })
|
|
37
|
+
* config({ src: 'src' })
|
|
38
|
+
* config({ src: 'src', minify: false })
|
|
39
|
+
* config({ minify: false }) // INVALID
|
|
40
|
+
*/
|
|
41
|
+
export declare type EitherAnd<A, B, C = void, D = void> = EitherOrBoth<A, B, C, D>;
|
|
23
42
|
//# sourceMappingURL=index.d.ts.map
|
package/cjs/utils/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC;;;;;;;;;;;;;;;;GAgBG;AACH,oBAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC;;;;;;;;;;;;;;;;GAgBG;AACH,oBAAY,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,GAC/D,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GACb,CAAC,CAAC,SAAS,IAAI,GACb,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAC7C,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GACf,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAC7C,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAC7C,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CACd,CAAA;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACF,oBAAY,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../ts/utils/index.spec.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../ts/utils/index.spec.ts"],"names":[],"mappings":"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"}
|
package/esm/utils/index.d.ts
CHANGED
|
@@ -19,5 +19,24 @@ export type { Widen } from './Widen.js';
|
|
|
19
19
|
* config({ src: 'src', minify: false })
|
|
20
20
|
* config({ minify: false }) // INVALID
|
|
21
21
|
*/
|
|
22
|
-
export declare type
|
|
22
|
+
export declare type EitherOrBoth<A, B, C = void, D = void> = C extends void ? A | B | A & B : (D extends void ? A | B | C | A & B | A & C | B & C | A & B & C : A | B | C | D | A & B | A & C | A & D | B & C | B & D | C & D | A & B & C | A & B & D | A & C & D | B & C & D | A & B & C & D);
|
|
23
|
+
/**
|
|
24
|
+
* `A` | `B` | `A & B`.
|
|
25
|
+
* Supports up to 4 types, and it is composable.
|
|
26
|
+
* This is useful when you want to compose multiple options together,
|
|
27
|
+
* while preserving their required field and structure.
|
|
28
|
+
* If the types overlaps each other, you may run into some corner cases.
|
|
29
|
+
* But in general usage it should work as expected.
|
|
30
|
+
* @deprecated renamed to `EitherOrBoth`
|
|
31
|
+
* @example
|
|
32
|
+
* type A = { src: string, minify?: boolean }
|
|
33
|
+
* type B = { logLevel: number }
|
|
34
|
+
* function config(options: EitherAnd<A, B>) { }
|
|
35
|
+
*
|
|
36
|
+
* config({ logLevel: 1 })
|
|
37
|
+
* config({ src: 'src' })
|
|
38
|
+
* config({ src: 'src', minify: false })
|
|
39
|
+
* config({ minify: false }) // INVALID
|
|
40
|
+
*/
|
|
41
|
+
export declare type EitherAnd<A, B, C = void, D = void> = EitherOrBoth<A, B, C, D>;
|
|
23
42
|
//# sourceMappingURL=index.d.ts.map
|
package/esm/utils/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC;;;;;;;;;;;;;;;;GAgBG;AACH,oBAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC;;;;;;;;;;;;;;;;GAgBG;AACH,oBAAY,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,GAC/D,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GACb,CAAC,CAAC,SAAS,IAAI,GACb,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAC7C,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GACf,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAC7C,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAC7C,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CACd,CAAA;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACF,oBAAY,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../ts/utils/index.spec.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../ts/utils/index.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/ts/utils/index.ts
CHANGED
|
@@ -20,7 +20,7 @@ export type { Widen } from './Widen.js'
|
|
|
20
20
|
* config({ src: 'src', minify: false })
|
|
21
21
|
* config({ minify: false }) // INVALID
|
|
22
22
|
*/
|
|
23
|
-
export type
|
|
23
|
+
export type EitherOrBoth<A, B, C = void, D = void> = C extends void
|
|
24
24
|
? A | B | A & B
|
|
25
25
|
: (D extends void
|
|
26
26
|
? A | B | C | A & B | A & C | B & C | A & B & C
|
|
@@ -29,3 +29,23 @@ export type EitherAnd<A, B, C = void, D = void> = C extends void
|
|
|
29
29
|
A & B & C | A & B & D | A & C & D | B & C & D |
|
|
30
30
|
A & B & C & D
|
|
31
31
|
)
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* `A` | `B` | `A & B`.
|
|
35
|
+
* Supports up to 4 types, and it is composable.
|
|
36
|
+
* This is useful when you want to compose multiple options together,
|
|
37
|
+
* while preserving their required field and structure.
|
|
38
|
+
* If the types overlaps each other, you may run into some corner cases.
|
|
39
|
+
* But in general usage it should work as expected.
|
|
40
|
+
* @deprecated renamed to `EitherOrBoth`
|
|
41
|
+
* @example
|
|
42
|
+
* type A = { src: string, minify?: boolean }
|
|
43
|
+
* type B = { logLevel: number }
|
|
44
|
+
* function config(options: EitherAnd<A, B>) { }
|
|
45
|
+
*
|
|
46
|
+
* config({ logLevel: 1 })
|
|
47
|
+
* config({ src: 'src' })
|
|
48
|
+
* config({ src: 'src', minify: false })
|
|
49
|
+
* config({ minify: false }) // INVALID
|
|
50
|
+
*/
|
|
51
|
+
export type EitherAnd<A, B, C = void, D = void> = EitherOrBoth<A, B, C, D>
|