@ts-utilities/core 1.0.0 → 1.0.2

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.
@@ -0,0 +1,610 @@
1
+ //#region src/types/utilities.d.ts
2
+ /**
3
+ * Extracts the keys of an object type as a union type.
4
+ *
5
+ * @template T - The object type to extract keys from
6
+ * @returns A union of all keys in the object type
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * type User = { name: string; age: number };
11
+ * type UserKeys = Keys<User>; // 'name' | 'age'
12
+ * ```
13
+ */
14
+ type Keys<T extends object> = keyof T;
15
+ /**
16
+ * Extracts the values of an object type as a union type.
17
+ *
18
+ * @template T - The object type to extract values from
19
+ * @returns A union of all values in the object type
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * type User = { name: string; age: number };
24
+ * type UserValues = Values<User>; // string | number
25
+ * ```
26
+ */
27
+ type Values<T extends object> = T[keyof T];
28
+ /**
29
+ * Makes all properties of an object type optional recursively.
30
+ *
31
+ * This type traverses through nested objects and arrays, making all properties optional.
32
+ * Functions and primitives are left unchanged.
33
+ *
34
+ * @template T - The type to make deeply partial
35
+ * @returns A type with all properties optional recursively
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * type Config = {
40
+ * server: { host: string; port: number };
41
+ * features: string[];
42
+ * };
43
+ *
44
+ * type PartialConfig = DeepPartial<Config>;
45
+ * // {
46
+ * // server?: { host?: string; port?: number };
47
+ * // features?: string[];
48
+ * // }
49
+ * ```
50
+ */
51
+ type DeepPartial<T> = T extends Function ? T : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;
52
+ /**
53
+ * Makes only specified properties of an object type optional.
54
+ *
55
+ * @template T - The base object type
56
+ * @template K - The keys to make optional
57
+ * @returns An object type with specified properties optional
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * type User = { name: string; age: number; email: string };
62
+ * type PartialUser = SelectivePartial<User, 'age' | 'email'>;
63
+ * // { name: string; age?: number; email?: string }
64
+ * ```
65
+ */
66
+ type SelectivePartial<T, K$1 extends keyof T> = Omit<T, K$1> & Partial<Pick<T, K$1>>;
67
+ /**
68
+ * Makes all properties of an object type required recursively.
69
+ *
70
+ * This type traverses through nested objects and arrays, making all properties required.
71
+ * Functions and primitives are left unchanged.
72
+ *
73
+ * @template T - The type to make deeply required
74
+ * @returns A type with all properties required recursively
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * type PartialConfig = {
79
+ * server?: { host?: string; port?: number };
80
+ * };
81
+ *
82
+ * type RequiredConfig = DeepRequired<PartialConfig>;
83
+ * // {
84
+ * // server: { host: string; port: number };
85
+ * // }
86
+ * ```
87
+ */
88
+ type DeepRequired<T> = T extends Function ? T : T extends Array<infer U> ? Array<DeepRequired<U>> : T extends object ? { [K in keyof T]-?: DeepRequired<T[K]> } : T;
89
+ /**
90
+ * Makes only specified properties of an object type required.
91
+ *
92
+ * @template T - The base object type
93
+ * @template K - The keys to make required
94
+ * @returns An object type with specified properties required
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * type PartialUser = { name?: string; age?: number; email?: string };
99
+ * type RequiredUser = SelectiveRequired<PartialUser, 'name'>;
100
+ * // { name: string; age?: number; email?: string }
101
+ * ```
102
+ */
103
+ type SelectiveRequired<T, K$1 extends keyof T> = Omit<T, K$1> & Required<Pick<T, K$1>>;
104
+ /**
105
+ * Creates a type where all properties are never (useful for excluding types).
106
+ *
107
+ * This can be used to create mutually exclusive types or to exclude certain properties.
108
+ *
109
+ * @template T - The object type to transform
110
+ * @returns An object type with all properties set to never
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * type User = { name: string; age: number };
115
+ * type ExcludedUser = Never<User>; // { name: never; age: never }
116
+ * ```
117
+ */
118
+ type Never<T> = { [K in keyof T]: never };
119
+ /**
120
+ * Makes all properties of an object type nullable recursively.
121
+ *
122
+ * @template T - The type to make nullable
123
+ * @returns A type where all properties can be null
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * type User = { name: string; profile: { age: number } };
128
+ * type NullableUser = Nullable<User>;
129
+ * // { name: string | null; profile: { age: number | null } | null }
130
+ * ```
131
+ */
132
+ type Nullable<T> = T extends object ? { [P in keyof T]: Nullable<T[P]> } : T | null;
133
+ /**
134
+ * Makes all properties of an object type optional (undefined) recursively.
135
+ *
136
+ * @template T - The type to make optional
137
+ * @returns A type where all properties can be undefined
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * type User = { name: string; profile: { age: number } };
142
+ * type OptionalUser = Optional<User>;
143
+ * // { name: string | undefined; profile: { age: number | undefined } | undefined }
144
+ * ```
145
+ */
146
+ type Optional<T> = T extends object ? { [P in keyof T]: Optional<T[P]> } : T | undefined;
147
+ /**
148
+ * Makes all properties of an object type nullish (null or undefined) recursively.
149
+ *
150
+ * @template T - The type to make nullish
151
+ * @returns A type where all properties can be null or undefined
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * type User = { name: string; profile: { age: number } };
156
+ * type NullishUser = Nullish<User>;
157
+ * // { name: string | null | undefined; profile: { age: number | null | undefined } | null | undefined }
158
+ * ```
159
+ */
160
+ type Nullish<T> = T extends object ? { [P in keyof T]: Nullish<T[P]> } : T | null | undefined;
161
+ /**
162
+ * Makes all properties of an object type optional and nullish recursively.
163
+ *
164
+ * This combines optional properties with nullish values.
165
+ *
166
+ * @template T - The type to make maybe
167
+ * @returns A type where all properties are optional and can be null or undefined
168
+ *
169
+ * @example
170
+ * ```ts
171
+ * type User = { name: string; profile: { age: number } };
172
+ * type MaybeUser = Maybe<User>;
173
+ * // { name?: string | null | undefined; profile?: { age?: number | null | undefined } | null | undefined }
174
+ * ```
175
+ */
176
+ type Maybe<T> = T extends object ? { [P in keyof T]?: Nullish<T[P]> } : T | null | undefined;
177
+ /**
178
+ * Makes all properties of an object type readonly recursively.
179
+ *
180
+ * This type traverses through nested objects and arrays, making all properties readonly.
181
+ * Functions and primitives are left unchanged.
182
+ *
183
+ * @template T - The type to make deeply readonly
184
+ * @returns A type with all properties readonly recursively
185
+ *
186
+ * @example
187
+ * ```ts
188
+ * type Config = {
189
+ * server: { host: string; port: number };
190
+ * features: string[];
191
+ * };
192
+ *
193
+ * type ReadonlyConfig = DeepReadonly<Config>;
194
+ * // {
195
+ * // readonly server: { readonly host: string; readonly port: number };
196
+ * // readonly features: readonly string[];
197
+ * // }
198
+ * ```
199
+ */
200
+ type DeepReadonly<T> = T extends Function ? T : T extends Array<infer U> ? ReadonlyArray<DeepReadonly<U>> : T extends object ? { readonly [K in keyof T]: DeepReadonly<T[K]> } : T;
201
+ /**
202
+ * Removes readonly modifier from all properties of an object type recursively.
203
+ *
204
+ * @template T - The readonly type to make mutable
205
+ * @returns A type with all readonly modifiers removed
206
+ *
207
+ * @example
208
+ * ```ts
209
+ * type ReadonlyUser = { readonly name: string; readonly profile: { readonly age: number } };
210
+ * type MutableUser = Mutable<ReadonlyUser>;
211
+ * // { name: string; profile: { age: number } }
212
+ * ```
213
+ */
214
+ type Mutable<T> = { -readonly [P in keyof T]: T[P] };
215
+ /**
216
+ * Extracts keys of an object type that have values of a specific type.
217
+ *
218
+ * @template T - The object type to search
219
+ * @template U - The value type to match
220
+ * @returns A union of keys whose values match the specified type
221
+ *
222
+ * @example
223
+ * ```ts
224
+ * type User = { name: string; age: number; active: boolean };
225
+ * type StringKeys = KeysOfType<User, string>; // 'name'
226
+ * type NumberKeys = KeysOfType<User, number>; // 'age'
227
+ * ```
228
+ */
229
+ type KeysOfType<T, U$1> = { [K in keyof T]: T[K] extends U$1 ? K : never }[keyof T];
230
+ /**
231
+ * Omits properties from an object type that have values of a specific type.
232
+ *
233
+ * @template T - The object type to filter
234
+ * @template U - The value type to exclude
235
+ * @returns An object type without properties of the specified value type
236
+ *
237
+ * @example
238
+ * ```ts
239
+ * type Mixed = { name: string; age: number; active: boolean };
240
+ * type WithoutStrings = OmitByType<Mixed, string>; // { age: number; active: boolean }
241
+ * ```
242
+ */
243
+ type OmitByType<T, U$1> = { [K in keyof T as T[K] extends U$1 ? never : K]: T[K] };
244
+ /**
245
+ * Makes specified properties required while keeping others as-is.
246
+ *
247
+ * @template T - The base object type
248
+ * @template K - The keys to make required
249
+ * @returns An object type with specified properties required
250
+ *
251
+ * @example
252
+ * ```ts
253
+ * type PartialUser = { name?: string; age?: number; email?: string };
254
+ * type RequiredNameUser = RequiredKeys<PartialUser, 'name'>;
255
+ * // { name: string; age?: number; email?: string }
256
+ * ```
257
+ */
258
+ type RequiredKeys<T, K$1 extends keyof T> = Omit<T, K$1> & Required<Pick<T, K$1>>;
259
+ /**
260
+ * Computes the symmetric difference between two object types.
261
+ *
262
+ * Properties that exist in either T or U but not in both.
263
+ *
264
+ * @template T - First object type
265
+ * @template U - Second object type
266
+ * @returns Properties unique to T or U
267
+ *
268
+ * @example
269
+ * ```ts
270
+ * type A = { x: number; y: string };
271
+ * type B = { y: string; z: boolean };
272
+ * type DiffAB = Diff<A, B>; // { x: number; z: boolean }
273
+ * ```
274
+ */
275
+ type Diff<T, U$1> = Omit<T, keyof U$1> & Omit<U$1, keyof T>;
276
+ /**
277
+ * Computes the intersection of two object types (properties present in both).
278
+ *
279
+ * @template T - First object type
280
+ * @template U - Second object type
281
+ * @returns Properties that exist in both T and U
282
+ *
283
+ * @example
284
+ * ```ts
285
+ * type A = { x: number; y: string };
286
+ * type B = { y: string; z: boolean };
287
+ * type IntersectionAB = Intersection<A, B>; // { y: string }
288
+ * ```
289
+ */
290
+ type Intersection<T extends object, U$1 extends object> = Pick<T, Extract<keyof T, keyof U$1> & Extract<keyof U$1, keyof T>>;
291
+ /**
292
+ * Merges two object types, combining their properties.
293
+ *
294
+ * @template T - First object type
295
+ * @template U - Second object type
296
+ * @returns A merged object type with properties from both
297
+ *
298
+ * @example
299
+ * ```ts
300
+ * type A = { x: number; y: string };
301
+ * type B = { y: boolean; z: string };
302
+ * type Merged = Merge<A, B>; // { x: number; y: boolean; z: string }
303
+ * ```
304
+ */
305
+ type Merge<T extends object, U$1 extends object, I = Diff<T, U$1> & Intersection<U$1, T> & Diff<U$1, T>> = Pick<I, keyof I>;
306
+ /**
307
+ * Subtracts properties of one object type from another.
308
+ *
309
+ * @template T - The object type to subtract from
310
+ * @template U - The object type whose properties to subtract
311
+ * @returns T without properties that exist in U
312
+ *
313
+ * @example
314
+ * ```ts
315
+ * type A = { x: number; y: string; z: boolean };
316
+ * type B = { y: string };
317
+ * type Subtracted = Substract<A, B>; // { x: number; z: boolean }
318
+ * ```
319
+ */
320
+ type Substract<T extends object, U$1 extends object> = Omit<T, keyof U$1>;
321
+ /**
322
+ * Represents either all properties present or none of them.
323
+ *
324
+ * Useful for creating mutually exclusive configurations.
325
+ *
326
+ * @template T - The object type
327
+ * @returns Either the full object or an empty object with optional properties
328
+ *
329
+ * @example
330
+ * ```ts
331
+ * type Config = { host: string; port: number };
332
+ * type AllOrNoneConfig = AllOrNone<Config>;
333
+ * // { host: string; port: number } | {}
334
+ * ```
335
+ */
336
+ type AllOrNone<T> = T | { [P in keyof T]?: never };
337
+ /**
338
+ * Represents exactly one property from an object type being present.
339
+ *
340
+ * Useful for creating discriminated unions or mutually exclusive options.
341
+ *
342
+ * @template T - The object type
343
+ * @returns A union where only one property is present at a time
344
+ *
345
+ * @example
346
+ * ```ts
347
+ * type Action = { type: 'create'; payload: string } | { type: 'update'; id: number };
348
+ * type OneAction = OneOf<Action>;
349
+ * // { type: 'create'; payload: string } | { type: 'update'; id: number }
350
+ * ```
351
+ */
352
+ type OneOf<T> = { [K in keyof T]: Pick<T, K> }[keyof T];
353
+ /**
354
+ * Represents exactly two properties from an object type being present.
355
+ *
356
+ * @template T - The object type
357
+ * @returns A union where exactly two properties are present at a time
358
+ *
359
+ * @example
360
+ * ```ts
361
+ * type Config = { a: number; b: string; c: boolean };
362
+ * type TwoConfig = TwoOf<Config>;
363
+ * // { a: number; b: string } | { a: number; c: boolean } | { b: string; c: boolean }
364
+ * ```
365
+ */
366
+ type TwoOf<T> = { [K in keyof T]: { [L in Exclude<keyof T, K>]: Pick<T, K | L> }[Exclude<keyof T, K>] }[keyof T];
367
+ /**
368
+ * Prettifies a complex type by expanding it for better readability in tooltips.
369
+ *
370
+ * This type doesn't change the runtime type but helps with IntelliSense display.
371
+ *
372
+ * @template T - The type to prettify
373
+ * @returns The same type but expanded for better readability
374
+ *
375
+ * @example
376
+ * ```ts
377
+ * type Complex = { a: string } & { b: number };
378
+ * type PrettyComplex = Prettify<Complex>; // Shows as { a: string; b: number }
379
+ * ```
380
+ */
381
+ type Prettify<T> = T extends infer U ? U extends object ? { [K in keyof U]: U[K] } & {} : U : never;
382
+ /**
383
+ * Extracts all nested keys of an object type as dot-separated strings.
384
+ *
385
+ * @template ObjectType - The object type to extract nested keys from
386
+ * @template IgnoreKeys - Keys to ignore during extraction
387
+ * @returns A union of dot-separated string paths
388
+ *
389
+ * @example
390
+ * ```ts
391
+ * type User = {
392
+ * name: string;
393
+ * profile: { age: number; address: { city: string } };
394
+ * tags: string[];
395
+ * };
396
+ *
397
+ * type UserPaths = NestedKeyOf<User>;
398
+ * // 'name' | 'profile' | 'profile.age' | 'profile.address' | 'profile.address.city' | 'tags'
399
+ * ```
400
+ */
401
+ type NestedKeyOf<ObjectType extends object, IgnoreKeys extends string = never> = { [Key in keyof ObjectType & string]: Key extends IgnoreKeys ? never : ObjectType[Key] extends object ? ObjectType[Key] extends Array<any> ? Key : `${Key}` | `${Key}.${NestedKeyOf<ObjectType[Key], IgnoreKeys>}` : `${Key}` }[keyof ObjectType & string];
402
+ /**
403
+ * Creates a type that excludes properties present in another type.
404
+ *
405
+ * This is useful for creating mutually exclusive types.
406
+ *
407
+ * @template T - The base type
408
+ * @template U - The type whose properties to exclude
409
+ * @returns A type with properties from T that are not in U
410
+ *
411
+ * @example
412
+ * ```ts
413
+ * type A = { x: number; y: string };
414
+ * type B = { y: string };
415
+ * type WithoutB = Without<A, B>; // { x?: never }
416
+ * ```
417
+ */
418
+ type Without<T, U$1> = { [P in Exclude<keyof T, keyof U$1>]?: never };
419
+ //#endregion
420
+ //#region src/types/gates.d.ts
421
+ type BUFFER<T> = T;
422
+ type IMPLIES<T, U$1> = T extends U$1 ? true : false;
423
+ type XOR_Binary<T, U$1> = T | U$1 extends object ? (Without<T, U$1> & U$1) | (Without<U$1, T> & T) : T | U$1;
424
+ type XNOR_Binary<T, U$1> = (T & U$1) | (Without<T, U$1> & Without<U$1, T>);
425
+ /**
426
+ * Computes a type-level AND (all must true) for a tuple of types.
427
+ *
428
+ * Truth table for 3 arguments:
429
+ *
430
+ * A B C = AND
431
+ * 1 1 1 = 1
432
+ * 1 1 0 = 0
433
+ * 1 0 1 = 0
434
+ * 1 0 0 = 0
435
+ * 0 1 1 = 0
436
+ * 0 1 0 = 0
437
+ * 0 0 1 = 0
438
+ * 0 0 0 = 0
439
+ *
440
+ * @template T - Tuple of boolean-like types (1/0)
441
+ */
442
+ type AND<T extends any[]> = T extends [infer F, ...infer R] ? R extends any[] ? F & AND<R> : F : unknown;
443
+ /**
444
+ * Computes a type-level OR (At least one) for a tuple of types.
445
+ *
446
+ * Truth table for 3 arguments:
447
+ *
448
+ * A B C = OR
449
+ * 1 1 1 = 1
450
+ * 1 1 0 = 1
451
+ * 1 0 1 = 1
452
+ * 1 0 0 = 1
453
+ * 0 1 1 = 1
454
+ * 0 1 0 = 1
455
+ * 0 0 1 = 1
456
+ * 0 0 0 = 0
457
+ *
458
+ * @template T - Tuple of boolean-like types (1/0)
459
+ */
460
+ type OR<T extends any[]> = T extends [infer F, ...infer R] ? R extends any[] ? F | OR<R> : F : never;
461
+ /**
462
+ * Computes a type-level XOR (only one/odd) for a tuple of types.
463
+ *
464
+ * Truth table for 3 arguments:
465
+ *
466
+ * A B C = XOR
467
+ * 1 1 1 = 1
468
+ * 1 1 0 = 0
469
+ * 1 0 1 = 0
470
+ * 1 0 0 = 1
471
+ * 0 1 1 = 0
472
+ * 0 1 0 = 1
473
+ * 0 0 1 = 1
474
+ * 0 0 0 = 0
475
+ *
476
+ * @template T - Tuple of boolean-like types (1/0)
477
+ */
478
+ type XOR<T extends any[]> = T extends [infer F, ...infer R] ? R extends [infer S, ...infer Rest] ? XOR<[XOR_Binary<F, S>, ...Rest]> : F : never;
479
+ /**
480
+ * Computes a type-level XNOR (All or None true) for a tuple of types.
481
+ *
482
+ * Truth table for 3 arguments:
483
+ *
484
+ * A B C = XNOR
485
+ * 1 1 1 = 0
486
+ * 1 1 0 = 1
487
+ * 1 0 1 = 1
488
+ * 1 0 0 = 0
489
+ * 0 1 1 = 1
490
+ * 0 1 0 = 0
491
+ * 0 0 1 = 0
492
+ * 0 0 0 = 1
493
+ *
494
+ * @template T - Tuple of boolean-like types (1/0)
495
+ */
496
+ type XNOR<T extends any[]> = T extends [infer F, ...infer R] ? R extends [infer S, ...infer Rest] ? XNOR<[XNOR_Binary<F, S>, ...Rest]> : F : never;
497
+ /**
498
+ * Computes a type-level NOT for a tuple of types.
499
+ *
500
+ * Truth table for 3 arguments:
501
+ *
502
+ * A B C = NOT
503
+ * 1 1 1 = 0
504
+ * 1 1 0 = 0
505
+ * 1 0 1 = 0
506
+ * 1 0 0 = 0
507
+ * 0 1 1 = 0
508
+ * 0 1 0 = 0
509
+ * 0 0 1 = 0
510
+ * 0 0 0 = 1
511
+ *
512
+ * @template T - Tuple of boolean-like types (1/0)
513
+ */
514
+ type NOT<T> = { [P in keyof T]?: never };
515
+ /**
516
+ * Computes a type-level NAND for a tuple of types.
517
+ *
518
+ * Truth table for 3 arguments:
519
+ *
520
+ * A B C = NAND
521
+ * 1 1 1 = 0
522
+ * 1 1 0 = 1
523
+ * 1 0 1 = 1
524
+ * 1 0 0 = 1
525
+ * 0 1 1 = 1
526
+ * 0 1 0 = 1
527
+ * 0 0 1 = 1
528
+ * 0 0 0 = 1
529
+ *
530
+ * @template T - Tuple of boolean-like types (1/0)
531
+ */
532
+ type NAND<T extends any[]> = NOT<AND<T>>;
533
+ /**
534
+ * Computes a type-level NOR for a tuple of types.
535
+ *
536
+ * Truth table for 3 arguments:
537
+ *
538
+ * A B C = NOR
539
+ * 1 1 1 = 0
540
+ * 1 1 0 = 0
541
+ * 1 0 1 = 0
542
+ * 1 0 0 = 0
543
+ * 0 1 1 = 0
544
+ * 0 1 0 = 0
545
+ * 0 0 1 = 0
546
+ * 0 0 0 = 1
547
+ *
548
+ * @template T - Tuple of boolean-like types (1/0)
549
+ */
550
+ type NOR<T extends any[]> = NOT<OR<T>>;
551
+ //#endregion
552
+ //#region src/types/guards.d.ts
553
+ /**
554
+ * Represents primitive JavaScript types including null and undefined.
555
+ */
556
+ type Primitive = string | number | bigint | boolean | symbol | null | undefined;
557
+ /**
558
+ * Represents all falsy values in JavaScript.
559
+ */
560
+ type Falsy = false | '' | 0 | null | undefined;
561
+ /**
562
+ * Type guard that checks if a value is falsy.
563
+ *
564
+ * @param val - The value to check
565
+ * @returns True if the value is falsy, false otherwise
566
+ *
567
+ * @example
568
+ * if (isFalsy(value)) {
569
+ * console.log('Value is falsy');
570
+ * }
571
+ */
572
+ declare const isFalsy: (val: unknown) => val is Falsy;
573
+ /**
574
+ * Type guard that checks if a value is null or undefined.
575
+ *
576
+ * @param val - The value to check
577
+ * @returns True if the value is null or undefined, false otherwise
578
+ *
579
+ * @example
580
+ * if (isNullish(value)) {
581
+ * console.log('Value is null or undefined');
582
+ * }
583
+ */
584
+ declare const isNullish: (val: unknown) => val is null | undefined;
585
+ /**
586
+ * Type guard that checks if a value is a primitive type.
587
+ *
588
+ * @param val - The value to check
589
+ * @returns True if the value is a primitive, false otherwise
590
+ *
591
+ * @example
592
+ * if (isPrimitive(value)) {
593
+ * console.log('Value is a primitive type');
594
+ * }
595
+ */
596
+ declare const isPrimitive: (val: unknown) => val is Primitive;
597
+ /**
598
+ * Type guard that checks if a value is a plain object (not an array, function, etc.).
599
+ *
600
+ * @param value - The value to check
601
+ * @returns True if the value is a plain object, false otherwise
602
+ *
603
+ * @example
604
+ * if (isPlainObject(value)) {
605
+ * console.log('Value is a plain object');
606
+ * }
607
+ */
608
+ declare function isPlainObject(value: unknown): value is Record<string, any>;
609
+ //#endregion
610
+ export { Never as A, Substract as B, Intersection as C, Merge as D, Maybe as E, Optional as F, Values as H, Prettify as I, RequiredKeys as L, Nullish as M, OmitByType as N, Mutable as O, OneOf as P, SelectivePartial as R, Diff as S, KeysOfType as T, Without as U, TwoOf as V, XOR_Binary as _, isPlainObject as a, DeepReadonly as b, BUFFER as c, NOR as d, NOT as f, XOR as g, XNOR_Binary as h, isNullish as i, Nullable as j, NestedKeyOf as k, IMPLIES as l, XNOR as m, Primitive as n, isPrimitive as o, OR as p, isFalsy as r, AND as s, Falsy as t, NAND as u, AllOrNone as v, Keys as w, DeepRequired as x, DeepPartial as y, SelectiveRequired as z };