type-plus 4.15.0 → 4.15.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.
@@ -4,11 +4,11 @@ import { typeSym, valueSym } from './types.js';
4
4
  * Create a "branded" version of a type.
5
5
  * TypeScript won't allow implicit conversion to this type
6
6
  */
7
- export declare type Brand<B extends string, T> = T extends undefined | null | number | bigint | boolean ? {
7
+ export declare type Brand<B extends string, T> = T extends object ? T & {
8
8
  [typeSym]: B;
9
- [valueSym]: T;
10
- } : T & {
9
+ } : {
11
10
  [typeSym]: B;
11
+ [valueSym]: T;
12
12
  };
13
13
  /**
14
14
  * Creates a brand creator with the specified type.
@@ -1 +1 @@
1
- {"version":3,"file":"Brand.d.ts","sourceRoot":"","sources":["../../ts/nominal-types/Brand.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE9C;;;GAGG;AACH,oBAAY,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IACnC,CAAC,SAAS,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GACpD;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;CAAE,GAC/B,CAAC,GAAG;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,CAAA;AAExB;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvF;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"Brand.d.ts","sourceRoot":"","sources":["../../ts/nominal-types/Brand.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE9C;;;GAGG;AACH,oBAAY,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IACnC,CAAC,SAAS,MAAM,GACd,CAAC,GAAG;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,GACpB;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;CAAE,CAAA;AAEnC;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvF;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -3,30 +3,45 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var index_js_1 = require("../index.js");
4
4
  var index_js_2 = require("../predicates/index.js");
5
5
  describe('brand()', function () {
6
- test('unbranded type cannot assign to branded type', function () {
6
+ it('cannot assign from unbranded type', function () {
7
7
  var a = (0, index_js_1.brand)('a', { a: 1 });
8
8
  var b = { a: 1 };
9
9
  index_js_2.isType.f();
10
10
  });
11
- test('basic use case', function () {
11
+ it('can assign to unbranded type', function () {
12
+ var a = { a: 1 };
13
+ var b = (0, index_js_1.brand)('a', { a: 1 });
14
+ index_js_2.isType.t();
15
+ });
16
+ it('cannot assign between two different brand', function () {
12
17
  var a = (0, index_js_1.brand)('a', { a: 1 });
13
18
  var b = (0, index_js_1.brand)('b', { b: 'b' });
14
19
  index_js_2.isType.f();
15
20
  (0, index_js_1.assertType)(a.a);
16
21
  (0, index_js_1.assertType)(b.b);
17
22
  });
18
- test('same brand of the same type can be assigned to each other', function () {
23
+ it('can assign betwen same brand of the same type', function () {
19
24
  var a = (0, index_js_1.brand)('a', { a: 1 });
20
25
  var b = (0, index_js_1.brand)('a', { a: 2 });
21
26
  b = a;
22
27
  expect(b.a).toBe(1);
23
28
  });
24
- test('flavor with the same name cannot be assigned to brand', function () {
29
+ it('cannot assign betwen same brand with different type', function () {
30
+ var a = (0, index_js_1.brand)('a', { a: 1 });
31
+ var b = (0, index_js_1.brand)('a', { b: 2 });
32
+ index_js_2.isType.f();
33
+ });
34
+ it('cannot assign from flavor with the same name', function () {
25
35
  var b = (0, index_js_1.brand)('x', { a: 1 });
26
36
  var f = (0, index_js_1.flavor)('x', { a: 1 });
27
37
  index_js_2.isType.f();
28
38
  });
29
- test('without subject creates a typed brand creator', function () {
39
+ it('can assign to flavor with the same name (this is a feature of flavor)', function () {
40
+ var b = (0, index_js_1.brand)('x', { a: 1 });
41
+ var f = (0, index_js_1.flavor)('x', { a: 1 });
42
+ index_js_2.isType.t();
43
+ });
44
+ it('creates a typed brand ceator when invoke without subject', function () {
30
45
  var createPerson = (0, index_js_1.brand)('person');
31
46
  var person1 = createPerson(1);
32
47
  var person2 = createPerson(2);
@@ -36,5 +51,36 @@ describe('brand()', function () {
36
51
  person2 = person1;
37
52
  index_js_2.isType.f();
38
53
  });
54
+ it('accepts null as subject', function () {
55
+ var b = (0, index_js_1.brand)('x', null);
56
+ index_js_2.isType.equal();
57
+ });
58
+ it('accepts undefined as subject', function () {
59
+ var b = (0, index_js_1.brand)('x', undefined);
60
+ index_js_2.isType.equal();
61
+ });
62
+ it('accepts function as subject', function () {
63
+ var b = (0, index_js_1.brand)('x', function boo() { });
64
+ var c = (0, index_js_1.brand)('x', function coo() { });
65
+ index_js_2.isType.equal();
66
+ index_js_2.isType.t();
67
+ index_js_2.isType.t();
68
+ });
69
+ it('can assign to another function brand based on function assignment logic', function () {
70
+ function af() { }
71
+ function bf(_) { }
72
+ function cf(_) { }
73
+ var a = (0, index_js_1.brand)('x', af);
74
+ var b = (0, index_js_1.brand)('x', bf);
75
+ var c = (0, index_js_1.brand)('x', cf);
76
+ index_js_2.isType.t();
77
+ index_js_2.isType.t();
78
+ index_js_2.isType.f();
79
+ index_js_2.isType.f();
80
+ index_js_2.isType.f();
81
+ index_js_2.isType.f();
82
+ index_js_2.isType.f();
83
+ index_js_2.isType.f();
84
+ });
39
85
  });
40
86
  //# sourceMappingURL=Brand.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Brand.spec.js","sourceRoot":"","sources":["../../ts/nominal-types/Brand.spec.ts"],"names":[],"mappings":";;AAAA,wCAAyE;AACzE,mDAA+C;AAE/C,QAAQ,CAAC,SAAS,EAAE;IAClB,IAAI,CAAC,8CAA8C,EAAE;QACnD,IAAM,CAAC,GAAG,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9B,IAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QAClB,iBAAM,CAAC,CAAC,EAAiC,CAAA;IAC3C,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,gBAAgB,EAAE;QACrB,IAAM,CAAC,GAAG,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAU,EAAE,CAAC,CAAA;QACvC,IAAM,CAAC,GAAG,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QAEhC,iBAAM,CAAC,CAAC,EAAiC,CAAA;QACzC,IAAA,qBAAU,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAClB,IAAA,qBAAU,EAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,2DAA2D,EAAE;QAChE,IAAM,CAAC,GAAG,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9B,IAAI,CAAC,GAAG,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAE5B,CAAC,GAAG,CAAC,CAAA;QACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,uDAAuD,EAAE;QAC5D,IAAM,CAAC,GAAG,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9B,IAAM,CAAC,GAAG,IAAA,iBAAM,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC/B,iBAAM,CAAC,CAAC,EAAiC,CAAA;IAC3C,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,+CAA+C,EAAE;QACpD,IAAM,YAAY,GAAG,IAAA,gBAAK,EAAC,QAAQ,CAAC,CAAA;QACpC,IAAI,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QAC7B,IAAI,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QAE7B,IAAM,cAAc,GAAG,IAAA,gBAAK,EAAC,MAAM,CAAC,CAAA;QACpC,IAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QAElC,OAAO,GAAG,OAAO,CAAA;QACjB,OAAO,GAAG,OAAO,CAAA;QAEjB,iBAAM,CAAC,CAAC,EAA0C,CAAA;IACpD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"Brand.spec.js","sourceRoot":"","sources":["../../ts/nominal-types/Brand.spec.ts"],"names":[],"mappings":"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"}
@@ -13,11 +13,11 @@ import { IsNever } from '../PrimitiveTypes.js';
13
13
  export declare type Equal<A, B, Then = true, Else = false> = [
14
14
  A,
15
15
  B
16
- ] extends [boolean | string | number, boolean | string | number] ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Then : Else : (IsNever<A> extends true ? (IsNever<B> extends true ? Then : Else) : (A extends B ? B extends A ? Then : Else : Else));
16
+ ] extends [object, object] ? (IsNever<A> extends true ? (IsNever<B> extends true ? Then : Else) : (A extends B ? B extends A ? Then : Else : Else)) : (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Then : Else;
17
17
  export declare type IsEqual<A, B> = Equal<A, B>;
18
18
  export declare type NotEqual<A, B, Then = true, Else = false> = [
19
19
  A,
20
20
  B
21
- ] extends [boolean | string | number, boolean | string | number] ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Else : Then : (IsNever<A> extends true ? (IsNever<B> extends true ? Then : Else) : (A extends B ? B extends A ? Else : Then : Then));
21
+ ] extends [object, object] ? (IsNever<A> extends true ? (IsNever<B> extends true ? Else : Then) : (A extends B ? B extends A ? Else : Then : Then)) : (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Else : Then;
22
22
  export declare type IsNotEqual<A, B> = NotEqual<A, B>;
23
23
  //# sourceMappingURL=Equal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Equal.d.ts","sourceRoot":"","sources":["../../ts/predicates/Equal.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAE9C;;GAEG;AACH,oBAAY,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAC/C;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,GACnE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GACnF,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GACvC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAA;AACvD,oBAAY,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAEvC,oBAAY,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAClD;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,GACnE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GACnF,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GACvC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAA;AACvD,oBAAY,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"Equal.d.ts","sourceRoot":"","sources":["../../ts/predicates/Equal.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAE9C;;GAEG;AACH,oBAAY,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAC/C;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GACvC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GACnD,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AACvF,oBAAY,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAEvC,oBAAY,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAClD;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GACvC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GACnD,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAEvF,oBAAY,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA"}
@@ -2,8 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var index_js_1 = require("../index.js");
4
4
  describe('Equal<A, B>', function () {
5
- test('match', function () {
5
+ it('compares among booleans', function () {
6
6
  index_js_1.assertType.isTrue(true);
7
+ index_js_1.assertType.isTrue(true);
8
+ index_js_1.assertType.isTrue(true);
9
+ index_js_1.assertType.isFalse(false);
10
+ index_js_1.assertType.isFalse(false);
11
+ });
12
+ it('compares boolean with others', function () {
13
+ index_js_1.assertType.isFalse(false);
14
+ index_js_1.assertType.isFalse(false);
15
+ index_js_1.assertType.isFalse(false);
16
+ index_js_1.assertType.isFalse(false);
17
+ index_js_1.assertType.isFalse(false);
18
+ index_js_1.assertType.isFalse(false);
19
+ index_js_1.assertType.isFalse(false);
20
+ index_js_1.assertType.isFalse(false);
21
+ index_js_1.assertType.isFalse(false);
22
+ index_js_1.assertType.isFalse(false);
23
+ index_js_1.assertType.isFalse(false);
24
+ index_js_1.assertType.isFalse(false);
25
+ index_js_1.assertType.isFalse(false);
26
+ index_js_1.assertType.isFalse(false);
7
27
  });
8
28
  test('not match', function () {
9
29
  index_js_1.assertType.isFalse(false);
@@ -54,6 +74,12 @@ describe('Equal<A, B>', function () {
54
74
  index_js_1.assertType.isFalse(false);
55
75
  index_js_1.assertType.isFalse(false);
56
76
  });
77
+ it('works with union types containing undefined', function () {
78
+ index_js_1.assertType.isFalse(false);
79
+ });
80
+ it('works with union types containing symbol', function () {
81
+ index_js_1.assertType.isFalse(false);
82
+ });
57
83
  });
58
84
  describe('NotEqual<A, B>', function () {
59
85
  test('boolean', function () {
@@ -1 +1 @@
1
- {"version":3,"file":"Equal.spec.js","sourceRoot":"","sources":["../../ts/predicates/Equal.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Equal.spec.js","sourceRoot":"","sources":["../../ts/predicates/Equal.spec.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,11 @@ import { typeSym, valueSym } from './types.js';
4
4
  * Create a "branded" version of a type.
5
5
  * TypeScript won't allow implicit conversion to this type
6
6
  */
7
- export declare type Brand<B extends string, T> = T extends undefined | null | number | bigint | boolean ? {
7
+ export declare type Brand<B extends string, T> = T extends object ? T & {
8
8
  [typeSym]: B;
9
- [valueSym]: T;
10
- } : T & {
9
+ } : {
11
10
  [typeSym]: B;
11
+ [valueSym]: T;
12
12
  };
13
13
  /**
14
14
  * Creates a brand creator with the specified type.
@@ -1 +1 @@
1
- {"version":3,"file":"Brand.d.ts","sourceRoot":"","sources":["../../ts/nominal-types/Brand.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE9C;;;GAGG;AACH,oBAAY,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IACnC,CAAC,SAAS,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GACpD;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;CAAE,GAC/B,CAAC,GAAG;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,CAAA;AAExB;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvF;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"Brand.d.ts","sourceRoot":"","sources":["../../ts/nominal-types/Brand.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE9C;;;GAGG;AACH,oBAAY,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IACnC,CAAC,SAAS,MAAM,GACd,CAAC,GAAG;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,GACpB;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;CAAE,CAAA;AAEnC;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvF;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -1,30 +1,45 @@
1
1
  import { assertType, brand, flavor } from '../index.js';
2
2
  import { isType } from '../predicates/index.js';
3
3
  describe('brand()', () => {
4
- test('unbranded type cannot assign to branded type', () => {
4
+ it('cannot assign from unbranded type', () => {
5
5
  const a = brand('a', { a: 1 });
6
6
  const b = { a: 1 };
7
7
  isType.f();
8
8
  });
9
- test('basic use case', () => {
9
+ it('can assign to unbranded type', () => {
10
+ const a = { a: 1 };
11
+ const b = brand('a', { a: 1 });
12
+ isType.t();
13
+ });
14
+ it('cannot assign between two different brand', () => {
10
15
  const a = brand('a', { a: 1 });
11
16
  const b = brand('b', { b: 'b' });
12
17
  isType.f();
13
18
  assertType(a.a);
14
19
  assertType(b.b);
15
20
  });
16
- test('same brand of the same type can be assigned to each other', () => {
21
+ it('can assign betwen same brand of the same type', () => {
17
22
  const a = brand('a', { a: 1 });
18
23
  let b = brand('a', { a: 2 });
19
24
  b = a;
20
25
  expect(b.a).toBe(1);
21
26
  });
22
- test('flavor with the same name cannot be assigned to brand', () => {
27
+ it('cannot assign betwen same brand with different type', () => {
28
+ const a = brand('a', { a: 1 });
29
+ const b = brand('a', { b: 2 });
30
+ isType.f();
31
+ });
32
+ it('cannot assign from flavor with the same name', () => {
23
33
  const b = brand('x', { a: 1 });
24
34
  const f = flavor('x', { a: 1 });
25
35
  isType.f();
26
36
  });
27
- test('without subject creates a typed brand creator', () => {
37
+ it('can assign to flavor with the same name (this is a feature of flavor)', () => {
38
+ const b = brand('x', { a: 1 });
39
+ const f = flavor('x', { a: 1 });
40
+ isType.t();
41
+ });
42
+ it('creates a typed brand ceator when invoke without subject', () => {
28
43
  const createPerson = brand('person');
29
44
  let person1 = createPerson(1);
30
45
  let person2 = createPerson(2);
@@ -34,5 +49,36 @@ describe('brand()', () => {
34
49
  person2 = person1;
35
50
  isType.f();
36
51
  });
52
+ it('accepts null as subject', () => {
53
+ const b = brand('x', null);
54
+ isType.equal();
55
+ });
56
+ it('accepts undefined as subject', () => {
57
+ const b = brand('x', undefined);
58
+ isType.equal();
59
+ });
60
+ it('accepts function as subject', () => {
61
+ const b = brand('x', function boo() { });
62
+ const c = brand('x', function coo() { });
63
+ isType.equal();
64
+ isType.t();
65
+ isType.t();
66
+ });
67
+ it('can assign to another function brand based on function assignment logic', () => {
68
+ function af() { }
69
+ function bf(_) { }
70
+ function cf(_) { }
71
+ const a = brand('x', af);
72
+ const b = brand('x', bf);
73
+ const c = brand('x', cf);
74
+ isType.t();
75
+ isType.t();
76
+ isType.f();
77
+ isType.f();
78
+ isType.f();
79
+ isType.f();
80
+ isType.f();
81
+ isType.f();
82
+ });
37
83
  });
38
84
  //# sourceMappingURL=Brand.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Brand.spec.js","sourceRoot":"","sources":["../../ts/nominal-types/Brand.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAoB,MAAM,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE/C,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9B,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QAClB,MAAM,CAAC,CAAC,EAAiC,CAAA;IAC3C,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAU,EAAE,CAAC,CAAA;QACvC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QAEhC,MAAM,CAAC,CAAC,EAAiC,CAAA;QACzC,UAAU,CAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAClB,UAAU,CAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9B,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAE5B,CAAC,GAAG,CAAC,CAAA;QACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC/B,MAAM,CAAC,CAAC,EAAiC,CAAA;IAC3C,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACzD,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;QACpC,IAAI,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QAC7B,IAAI,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QAE7B,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QAElC,OAAO,GAAG,OAAO,CAAA;QACjB,OAAO,GAAG,OAAO,CAAA;QAEjB,MAAM,CAAC,CAAC,EAA0C,CAAA;IACpD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"Brand.spec.js","sourceRoot":"","sources":["../../ts/nominal-types/Brand.spec.ts"],"names":[],"mappings":"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"}
@@ -13,11 +13,11 @@ import { IsNever } from '../PrimitiveTypes.js';
13
13
  export declare type Equal<A, B, Then = true, Else = false> = [
14
14
  A,
15
15
  B
16
- ] extends [boolean | string | number, boolean | string | number] ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Then : Else : (IsNever<A> extends true ? (IsNever<B> extends true ? Then : Else) : (A extends B ? B extends A ? Then : Else : Else));
16
+ ] extends [object, object] ? (IsNever<A> extends true ? (IsNever<B> extends true ? Then : Else) : (A extends B ? B extends A ? Then : Else : Else)) : (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Then : Else;
17
17
  export declare type IsEqual<A, B> = Equal<A, B>;
18
18
  export declare type NotEqual<A, B, Then = true, Else = false> = [
19
19
  A,
20
20
  B
21
- ] extends [boolean | string | number, boolean | string | number] ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Else : Then : (IsNever<A> extends true ? (IsNever<B> extends true ? Then : Else) : (A extends B ? B extends A ? Else : Then : Then));
21
+ ] extends [object, object] ? (IsNever<A> extends true ? (IsNever<B> extends true ? Else : Then) : (A extends B ? B extends A ? Else : Then : Then)) : (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Else : Then;
22
22
  export declare type IsNotEqual<A, B> = NotEqual<A, B>;
23
23
  //# sourceMappingURL=Equal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Equal.d.ts","sourceRoot":"","sources":["../../ts/predicates/Equal.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAE9C;;GAEG;AACH,oBAAY,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAC/C;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,GACnE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GACnF,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GACvC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAA;AACvD,oBAAY,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAEvC,oBAAY,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAClD;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,GACnE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GACnF,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GACvC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAA;AACvD,oBAAY,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"Equal.d.ts","sourceRoot":"","sources":["../../ts/predicates/Equal.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAE9C;;GAEG;AACH,oBAAY,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAC/C;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GACvC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GACnD,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AACvF,oBAAY,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAEvC,oBAAY,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAClD;IAAC,CAAC;IAAE,CAAC;CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GACvC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GACnD,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAEvF,oBAAY,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA"}
@@ -1,7 +1,27 @@
1
1
  import { assertType } from '../index.js';
2
2
  describe('Equal<A, B>', () => {
3
- test('match', () => {
3
+ it('compares among booleans', () => {
4
4
  assertType.isTrue(true);
5
+ assertType.isTrue(true);
6
+ assertType.isTrue(true);
7
+ assertType.isFalse(false);
8
+ assertType.isFalse(false);
9
+ });
10
+ it('compares boolean with others', () => {
11
+ assertType.isFalse(false);
12
+ assertType.isFalse(false);
13
+ assertType.isFalse(false);
14
+ assertType.isFalse(false);
15
+ assertType.isFalse(false);
16
+ assertType.isFalse(false);
17
+ assertType.isFalse(false);
18
+ assertType.isFalse(false);
19
+ assertType.isFalse(false);
20
+ assertType.isFalse(false);
21
+ assertType.isFalse(false);
22
+ assertType.isFalse(false);
23
+ assertType.isFalse(false);
24
+ assertType.isFalse(false);
5
25
  });
6
26
  test('not match', () => {
7
27
  assertType.isFalse(false);
@@ -52,6 +72,12 @@ describe('Equal<A, B>', () => {
52
72
  assertType.isFalse(false);
53
73
  assertType.isFalse(false);
54
74
  });
75
+ it('works with union types containing undefined', () => {
76
+ assertType.isFalse(false);
77
+ });
78
+ it('works with union types containing symbol', () => {
79
+ assertType.isFalse(false);
80
+ });
55
81
  });
56
82
  describe('NotEqual<A, B>', () => {
57
83
  test('boolean', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"Equal.spec.js","sourceRoot":"","sources":["../../ts/predicates/Equal.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Equal.spec.js","sourceRoot":"","sources":["../../ts/predicates/Equal.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "type-plus",
3
- "version": "4.15.0",
3
+ "version": "4.15.2",
4
4
  "description": "Provides additional types for TypeScript.",
5
5
  "homepage": "https://github.com/unional/type-plus",
6
6
  "bugs": {
@@ -1,32 +1,32 @@
1
- // By Drew Colthorp, <https://spin.atomicobject.com/2018/01/15/typescript-flexible-nominal-typing/#comment-604580>
2
- // <https://gist.github.com/dcolthorp/aa21cf87d847ae9942106435bf47565d>
3
-
4
- import { Widen } from '../utils/index.js'
5
- import { typeSym, valueSym } from './types.js'
6
-
7
- /**
8
- * Create a "branded" version of a type.
9
- * TypeScript won't allow implicit conversion to this type
10
- */
11
- export type Brand<B extends string, T> =
12
- T extends undefined | null | number | bigint | boolean
13
- ? { [typeSym]: B, [valueSym]: T }
14
- : T & { [typeSym]: B }
15
-
16
- /**
17
- * Creates a brand creator with the specified type.
18
- */
19
- export function brand<B extends string>(type: B): <T>(subject: T) => Brand<B, Widen<T>>
20
- /**
21
- * Creates a branded value of specified type.
22
- */
23
- export function brand<B extends string, T>(type: B, subject: T): Brand<B, Widen<T>>
24
- export function brand(type: string, subject?: unknown) {
25
- if (subject === undefined) return function <T>(subject: T) { return brand(type, subject) }
26
-
27
- if (typeof subject === 'object' && subject !== null) {
28
- // if subject is not an object, the branding will exist only in type-level.
29
- (subject as { [typeSym]: string })[typeSym] = type
30
- }
31
- return subject
32
- }
1
+ // By Drew Colthorp, <https://spin.atomicobject.com/2018/01/15/typescript-flexible-nominal-typing/#comment-604580>
2
+ // <https://gist.github.com/dcolthorp/aa21cf87d847ae9942106435bf47565d>
3
+
4
+ import { Widen } from '../utils/index.js'
5
+ import { typeSym, valueSym } from './types.js'
6
+
7
+ /**
8
+ * Create a "branded" version of a type.
9
+ * TypeScript won't allow implicit conversion to this type
10
+ */
11
+ export type Brand<B extends string, T> =
12
+ T extends object
13
+ ? T & { [typeSym]: B }
14
+ : { [typeSym]: B, [valueSym]: T }
15
+
16
+ /**
17
+ * Creates a brand creator with the specified type.
18
+ */
19
+ export function brand<B extends string>(type: B): <T>(subject: T) => Brand<B, Widen<T>>
20
+ /**
21
+ * Creates a branded value of specified type.
22
+ */
23
+ export function brand<B extends string, T>(type: B, subject: T): Brand<B, Widen<T>>
24
+ export function brand(type: string, subject?: unknown) {
25
+ if (subject === undefined) return function <T>(subject: T) { return brand(type, subject) }
26
+
27
+ if (typeof subject === 'object' && subject !== null) {
28
+ // if subject is not an object, the branding will exist only in type-level.
29
+ (subject as { [typeSym]: string })[typeSym] = type
30
+ }
31
+ return subject
32
+ }
@@ -13,17 +13,18 @@ import { IsNever } from '../PrimitiveTypes.js'
13
13
  * Checks if two types are equal.
14
14
  */
15
15
  export type Equal<A, B, Then = true, Else = false> =
16
- [A, B] extends [boolean | string | number, boolean | string | number]
17
- ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Then : Else
18
- : (IsNever<A> extends true
16
+ [A, B] extends [object, object]
17
+ ? (IsNever<A> extends true
19
18
  ? (IsNever<B> extends true ? Then : Else)
20
19
  : (A extends B ? B extends A ? Then : Else : Else))
20
+ : (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Then : Else
21
21
  export type IsEqual<A, B> = Equal<A, B>
22
22
 
23
23
  export type NotEqual<A, B, Then = true, Else = false> =
24
- [A, B] extends [boolean | string | number, boolean | string | number]
25
- ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Else : Then
26
- : (IsNever<A> extends true
27
- ? (IsNever<B> extends true ? Then : Else)
24
+ [A, B] extends [object, object]
25
+ ? (IsNever<A> extends true
26
+ ? (IsNever<B> extends true ? Else : Then)
28
27
  : (A extends B ? B extends A ? Else : Then : Then))
28
+ : (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Else : Then
29
+
29
30
  export type IsNotEqual<A, B> = NotEqual<A, B>