type-plus 6.2.0 → 6.3.0

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 CHANGED
@@ -487,6 +487,10 @@ So you may encounter some weird behavior if your logic is complex.
487
487
  - `Increment<A, Fail=never>`: alias of `Add<A, 1, Fail>`.
488
488
  - `Decrement<A, Fail=never>`: alias of `Subtract<A, 1, Fail>`.
489
489
 
490
+ ### Tuple
491
+
492
+ - [`TupleType`](ts/tuple/readme.md#tupletype)
493
+
490
494
  ### Utility Functions
491
495
 
492
496
  - `amend(subject)...`: amend subject as union or intersect of `T`.
package/cjs/index.d.ts CHANGED
@@ -19,5 +19,6 @@ export * from './object/index.js';
19
19
  export * from './predicates/index.js';
20
20
  export * from './promise/index.js';
21
21
  export * from './testing/index.js';
22
+ export * from './tuple/index.js';
22
23
  export * from './utils/index.js';
23
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC7D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACrF,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGlE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,cAAc,qBAAqB,CAAA;AACnC,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AACvD,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,mBAAmB,iBAAiB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAC1D,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC7D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACrF,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGlE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,cAAc,qBAAqB,CAAA;AACnC,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AACvD,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,mBAAmB,iBAAiB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAC1D,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
package/cjs/index.js CHANGED
@@ -47,6 +47,7 @@ __exportStar(require("./object/index.js"), exports);
47
47
  __exportStar(require("./predicates/index.js"), exports);
48
48
  __exportStar(require("./promise/index.js"), exports);
49
49
  __exportStar(require("./testing/index.js"), exports);
50
+ __exportStar(require("./tuple/index.js"), exports);
50
51
  __exportStar(require("./utils/index.js"), exports);
51
52
  // export { types, types as T }
52
53
  //# sourceMappingURL=index.js.map
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA4C;AAC5C,uCAA6D;AAApD,qGAAA,QAAQ,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,sGAAA,SAAS,OAAA;AAO1C,sDAAmC;AACnC,wEAAuD;AACvD,wDAAqC;AACrC,uDAAoC;AACpC,mDAAgC;AAChC,sDAAmC;AACnC,wDAAqC;AAErC,oDAAiC;AACjC,2DAAwC;AACxC,yDAAsC;AACtC,2EAA0D;AAC1D,oDAAiC;AACjC,wDAAqC;AACrC,qDAAkC;AAClC,qDAAkC;AAClC,mDAAgC;AAChC,+BAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA4C;AAC5C,uCAA6D;AAApD,qGAAA,QAAQ,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,sGAAA,SAAS,OAAA;AAO1C,sDAAmC;AACnC,wEAAuD;AACvD,wDAAqC;AACrC,uDAAoC;AACpC,mDAAgC;AAChC,sDAAmC;AACnC,wDAAqC;AAErC,oDAAiC;AACjC,2DAAwC;AACxC,yDAAsC;AACtC,2EAA0D;AAC1D,oDAAiC;AACjC,wDAAqC;AACrC,qDAAkC;AAClC,qDAAkC;AAClC,mDAAgC;AAChC,mDAAgC;AAChC,+BAA+B"}
@@ -1,9 +1,28 @@
1
1
  import type { IsAny } from '../any_plus/any.js';
2
+ import type { TupleType } from '../tuple/tuple.js';
2
3
  import type { And, Or } from './logical.js';
3
4
  /**
4
- * Checks if the two types are equal.
5
+ * Checks `A` and `B` are equal.
6
+ *
7
+ * ```ts
8
+ * import { type Equal } from 'type-plus'
9
+ *
10
+ * type R = Equal<1, 1> // true
11
+ * type R = Equal<any, any> // true
12
+ * type R = Equal<boolean, boolean> // true
13
+ * type R = Equal<true, true> // true
14
+ * type R = Equal<[1], [1]> // true
15
+ *
16
+ * type R = Equal<boolean, true> // false
17
+ * type R = Equal<any, 1> // false
18
+ * type R = Equal<[any], [1]> // false
19
+ * type R = Equal<{ a: 1 }, { a: 1; b: 2 }> // false
20
+ * ```
5
21
  */
6
- export type Equal<A, B, Then = true, Else = false> = [A, B] extends [B, A] ? And<IsAny<A>, IsAny<B>, Then, Or<IsAny<A>, IsAny<B>, Else, Then>> : Else;
22
+ export type Equal<A, B, Then = true, Else = false> = And<TupleType<A, true, false>, TupleType<B, true, false>, (<_>() => _ extends A ? 1 : 2) extends <_>() => _ extends B ? 1 : 2 ? Then : Else, [
23
+ A,
24
+ B
25
+ ] extends [B, A] ? And<IsAny<A>, IsAny<B>, Then, Or<IsAny<A>, IsAny<B>, Else, Then>> : Else>;
7
26
  /**
8
27
  * Checks if the two types are equal.
9
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Equal.d.ts","sourceRoot":"","sources":["../../ts/predicates/Equal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAE3C;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GACvE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,GACjE,IAAI,CAAA;AAEP;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE9E;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE/E;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"Equal.d.ts","sourceRoot":"","sources":["../../ts/predicates/Equal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,GAAG,CACvD,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EACzB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EACzB,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EACjF;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAChG,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE9E;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE/E;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export type * from './tuple.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/tuple/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,YAAY,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/tuple/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { IsNever } from '../PrimitiveTypes.js';
2
+ /**
3
+ * Check if `T` is a tuple.
4
+ *
5
+ * ```ts
6
+ * import type { TupleType } from 'type-plus'
7
+ *
8
+ * type R = TupleType<[]> // true
9
+ * type R = TupleType<[1]> // true
10
+ *
11
+ * type R = TupleType<number[]> // false
12
+ * type R = TupleType<string> // false
13
+ * ```
14
+ */
15
+ export type TupleType<T, Then = T, Else = never> = IsNever<T, Else, T extends infer A extends Array<any> ? (number extends A['length'] ? Else : Then) : Else>;
16
+ //# sourceMappingURL=tuple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../ts/tuple/tuple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAE9C;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,OAAO,CACzD,CAAC,EACD,IAAI,EACJ,CAAC,SAAS,MAAM,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CACxF,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=tuple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../ts/tuple/tuple.ts"],"names":[],"mappings":""}
package/esm/index.d.ts CHANGED
@@ -19,5 +19,6 @@ export * from './object/index.js';
19
19
  export * from './predicates/index.js';
20
20
  export * from './promise/index.js';
21
21
  export * from './testing/index.js';
22
+ export * from './tuple/index.js';
22
23
  export * from './utils/index.js';
23
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC7D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACrF,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGlE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,cAAc,qBAAqB,CAAA;AACnC,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AACvD,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,mBAAmB,iBAAiB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAC1D,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC7D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACrF,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGlE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,cAAc,qBAAqB,CAAA;AACnC,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AACvD,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,mBAAmB,iBAAiB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAC1D,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
package/esm/index.js CHANGED
@@ -15,6 +15,7 @@ export * from './object/index.js';
15
15
  export * from './predicates/index.js';
16
16
  export * from './promise/index.js';
17
17
  export * from './testing/index.js';
18
+ export * from './tuple/index.js';
18
19
  export * from './utils/index.js';
19
20
  // export { types, types as T }
20
21
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAO7D,cAAc,qBAAqB,CAAA;AACnC,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AACvD,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AAErC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAC1D,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,+BAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAO7D,cAAc,qBAAqB,CAAA;AACnC,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AACvD,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AAErC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAC1D,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,+BAA+B"}
@@ -1,9 +1,28 @@
1
1
  import type { IsAny } from '../any_plus/any.js';
2
+ import type { TupleType } from '../tuple/tuple.js';
2
3
  import type { And, Or } from './logical.js';
3
4
  /**
4
- * Checks if the two types are equal.
5
+ * Checks `A` and `B` are equal.
6
+ *
7
+ * ```ts
8
+ * import { type Equal } from 'type-plus'
9
+ *
10
+ * type R = Equal<1, 1> // true
11
+ * type R = Equal<any, any> // true
12
+ * type R = Equal<boolean, boolean> // true
13
+ * type R = Equal<true, true> // true
14
+ * type R = Equal<[1], [1]> // true
15
+ *
16
+ * type R = Equal<boolean, true> // false
17
+ * type R = Equal<any, 1> // false
18
+ * type R = Equal<[any], [1]> // false
19
+ * type R = Equal<{ a: 1 }, { a: 1; b: 2 }> // false
20
+ * ```
5
21
  */
6
- export type Equal<A, B, Then = true, Else = false> = [A, B] extends [B, A] ? And<IsAny<A>, IsAny<B>, Then, Or<IsAny<A>, IsAny<B>, Else, Then>> : Else;
22
+ export type Equal<A, B, Then = true, Else = false> = And<TupleType<A, true, false>, TupleType<B, true, false>, (<_>() => _ extends A ? 1 : 2) extends <_>() => _ extends B ? 1 : 2 ? Then : Else, [
23
+ A,
24
+ B
25
+ ] extends [B, A] ? And<IsAny<A>, IsAny<B>, Then, Or<IsAny<A>, IsAny<B>, Else, Then>> : Else>;
7
26
  /**
8
27
  * Checks if the two types are equal.
9
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Equal.d.ts","sourceRoot":"","sources":["../../ts/predicates/Equal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAE3C;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GACvE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,GACjE,IAAI,CAAA;AAEP;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE9E;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE/E;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"Equal.d.ts","sourceRoot":"","sources":["../../ts/predicates/Equal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,GAAG,CACvD,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EACzB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EACzB,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EACjF;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAChG,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE9E;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE/E;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export type * from './tuple.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/tuple/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/tuple/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { IsNever } from '../PrimitiveTypes.js';
2
+ /**
3
+ * Check if `T` is a tuple.
4
+ *
5
+ * ```ts
6
+ * import type { TupleType } from 'type-plus'
7
+ *
8
+ * type R = TupleType<[]> // true
9
+ * type R = TupleType<[1]> // true
10
+ *
11
+ * type R = TupleType<number[]> // false
12
+ * type R = TupleType<string> // false
13
+ * ```
14
+ */
15
+ export type TupleType<T, Then = T, Else = never> = IsNever<T, Else, T extends infer A extends Array<any> ? (number extends A['length'] ? Else : Then) : Else>;
16
+ //# sourceMappingURL=tuple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../ts/tuple/tuple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAE9C;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,OAAO,CACzD,CAAC,EACD,IAAI,EACJ,CAAC,SAAS,MAAM,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CACxF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tuple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../ts/tuple/tuple.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "type-plus",
3
- "version": "6.2.0",
3
+ "version": "6.3.0",
4
4
  "description": "Provides additional types for TypeScript.",
5
5
  "homepage": "https://github.com/unional/type-plus",
6
6
  "bugs": {
package/ts/index.ts CHANGED
@@ -22,5 +22,6 @@ export * from './object/index.js'
22
22
  export * from './predicates/index.js'
23
23
  export * from './promise/index.js'
24
24
  export * from './testing/index.js'
25
+ export * from './tuple/index.js'
25
26
  export * from './utils/index.js'
26
27
  // export { types, types as T }
@@ -1,12 +1,31 @@
1
1
  import type { IsAny } from '../any_plus/any.js'
2
+ import type { TupleType } from '../tuple/tuple.js'
2
3
  import type { And, Or } from './logical.js'
3
4
 
4
5
  /**
5
- * Checks if the two types are equal.
6
+ * Checks `A` and `B` are equal.
7
+ *
8
+ * ```ts
9
+ * import { type Equal } from 'type-plus'
10
+ *
11
+ * type R = Equal<1, 1> // true
12
+ * type R = Equal<any, any> // true
13
+ * type R = Equal<boolean, boolean> // true
14
+ * type R = Equal<true, true> // true
15
+ * type R = Equal<[1], [1]> // true
16
+ *
17
+ * type R = Equal<boolean, true> // false
18
+ * type R = Equal<any, 1> // false
19
+ * type R = Equal<[any], [1]> // false
20
+ * type R = Equal<{ a: 1 }, { a: 1; b: 2 }> // false
21
+ * ```
6
22
  */
7
- export type Equal<A, B, Then = true, Else = false> = [A, B] extends [B, A]
8
- ? And<IsAny<A>, IsAny<B>, Then, Or<IsAny<A>, IsAny<B>, Else, Then>>
9
- : Else
23
+ export type Equal<A, B, Then = true, Else = false> = And<
24
+ TupleType<A, true, false>,
25
+ TupleType<B, true, false>,
26
+ (<_>() => _ extends A ? 1 : 2) extends <_>() => _ extends B ? 1 : 2 ? Then : Else,
27
+ [A, B] extends [B, A] ? And<IsAny<A>, IsAny<B>, Then, Or<IsAny<A>, IsAny<B>, Else, Then>> : Else
28
+ >
10
29
 
11
30
  /**
12
31
  * Checks if the two types are equal.
@@ -0,0 +1 @@
1
+ export type * from './tuple.js'
@@ -0,0 +1,7 @@
1
+ # Tuple
2
+
3
+ ## TupleType
4
+
5
+ > `TupleType<T, Then = T, Else = never>
6
+
7
+ Check if `T` is a tuple, excluding array.
@@ -0,0 +1,20 @@
1
+ import { IsNever } from '../PrimitiveTypes.js'
2
+
3
+ /**
4
+ * Check if `T` is a tuple.
5
+ *
6
+ * ```ts
7
+ * import type { TupleType } from 'type-plus'
8
+ *
9
+ * type R = TupleType<[]> // true
10
+ * type R = TupleType<[1]> // true
11
+ *
12
+ * type R = TupleType<number[]> // false
13
+ * type R = TupleType<string> // false
14
+ * ```
15
+ */
16
+ export type TupleType<T, Then = T, Else = never> = IsNever<
17
+ T,
18
+ Else,
19
+ T extends infer A extends Array<any> ? (number extends A['length'] ? Else : Then) : Else
20
+ >