type-plus 4.11.3 → 4.12.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
@@ -276,6 +276,17 @@ assertType.isTrue(notA({ a: 1 }))
276
276
  notA({ a: '' }) // TypeScript complains
277
277
  ```
278
278
 
279
+ `IsNever<T>`:
280
+
281
+ ✔️ `logical`
282
+
283
+ Check if `A` is `never`.
284
+
285
+ ```ts
286
+ IsNever<never> // true
287
+ IsNever<1> // false
288
+ ```
289
+
279
290
  ## Type Utilities
280
291
 
281
292
  `type-plus` also provides additional type utilities.
@@ -1,2 +1,3 @@
1
1
  export declare type PrimitiveTypes = boolean | number | string | object | symbol | bigint | Function | undefined | null;
2
+ export declare type IsNever<T, Then = true, Else = false> = [T] extends [never] ? Then : Else;
2
3
  //# sourceMappingURL=PrimitiveTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrimitiveTypes.d.ts","sourceRoot":"","sources":["../ts/PrimitiveTypes.ts"],"names":[],"mappings":"AACA,oBAAY,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAA"}
1
+ {"version":3,"file":"PrimitiveTypes.d.ts","sourceRoot":"","sources":["../ts/PrimitiveTypes.ts"],"names":[],"mappings":"AAGA,oBAAY,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAA;AAE/G,oBAAY,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA"}
@@ -1,3 +1,4 @@
1
1
  "use strict";
2
+ // IsNever from @jack-williams: https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379091887
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  //# sourceMappingURL=PrimitiveTypes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrimitiveTypes.js","sourceRoot":"","sources":["../ts/PrimitiveTypes.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"PrimitiveTypes.js","sourceRoot":"","sources":["../ts/PrimitiveTypes.ts"],"names":[],"mappings":";AAAA,2GAA2G"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PrimitiveTypes.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimitiveTypes.spec.d.ts","sourceRoot":"","sources":["../ts/PrimitiveTypes.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var index_js_1 = require("./index.js");
4
+ describe('IsNever<T>', function () {
5
+ it('checks if type is never', function () {
6
+ index_js_1.isType.equal();
7
+ index_js_1.isType.equal();
8
+ index_js_1.isType.equal();
9
+ index_js_1.isType.equal();
10
+ });
11
+ });
12
+ //# sourceMappingURL=PrimitiveTypes.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimitiveTypes.spec.js","sourceRoot":"","sources":["../ts/PrimitiveTypes.spec.ts"],"names":[],"mappings":";;AAAA,uCAA4C;AAE5C,QAAQ,CAAC,YAAY,EAAE;IACrB,EAAE,CAAC,yBAAyB,EAAE;QAC5B,iBAAM,CAAC,KAAK,EAA8B,CAAA;QAC1C,iBAAM,CAAC,KAAK,EAAgC,CAAA;QAC5C,iBAAM,CAAC,KAAK,EAAuC,CAAA;QACnD,iBAAM,CAAC,KAAK,EAA4B,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
package/cjs/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export * from './nodejs/index.js';
11
11
  export * from './nominal-types/index.js';
12
12
  export * from './object/index.js';
13
13
  export * from './predicates/index.js';
14
- export type { PrimitiveTypes } from './PrimitiveTypes.js';
14
+ export type { PrimitiveTypes, IsNever } from './PrimitiveTypes.js';
15
15
  export * from './promise/index.js';
16
16
  export * from './testing/index.js';
17
17
  export type { UnionKeys } from './UnionKeys.js';
@@ -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,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAGlC,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,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,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClE,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAGlC,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,cAAc,kBAAkB,CAAA"}
@@ -6,17 +6,18 @@
6
6
  * This is needed for `boolean`, `string`, and `number`,
7
7
  * as they supports literal types.
8
8
  */
9
+ import { IsNever } from '../PrimitiveTypes.js';
9
10
  /**
10
11
  * Checks if two types are equal.
11
12
  */
12
13
  export declare type Equal<A, B, Then = true, Else = false> = [
13
14
  A,
14
15
  B
15
- ] extends [boolean | string | number, boolean | string | number] ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Then : Else : ([A] extends [never] ? ([B] extends [never] ? Then : Else) : (A extends B ? B extends A ? Then : Else : Else));
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
17
  export declare type IsEqual<A, B> = Equal<A, B>;
17
18
  export declare type NotEqual<A, B, Then = true, Else = false> = [
18
19
  A,
19
20
  B
20
- ] extends [boolean | string | number, boolean | string | number] ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Else : Then : ([A] extends [never] ? ([B] extends [never] ? Then : Else) : (A extends B ? B extends A ? Else : Then : Then));
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
22
  export declare type IsNotEqual<A, B> = NotEqual<A, B>;
22
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;;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,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAClB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GACnC,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,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAClB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GACnC,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,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,2 +1,3 @@
1
1
  export declare type PrimitiveTypes = boolean | number | string | object | symbol | bigint | Function | undefined | null;
2
+ export declare type IsNever<T, Then = true, Else = false> = [T] extends [never] ? Then : Else;
2
3
  //# sourceMappingURL=PrimitiveTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrimitiveTypes.d.ts","sourceRoot":"","sources":["../ts/PrimitiveTypes.ts"],"names":[],"mappings":"AACA,oBAAY,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAA"}
1
+ {"version":3,"file":"PrimitiveTypes.d.ts","sourceRoot":"","sources":["../ts/PrimitiveTypes.ts"],"names":[],"mappings":"AAGA,oBAAY,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAA;AAE/G,oBAAY,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA"}
@@ -1,2 +1,3 @@
1
+ // IsNever from @jack-williams: https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379091887
1
2
  export {};
2
3
  //# sourceMappingURL=PrimitiveTypes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrimitiveTypes.js","sourceRoot":"","sources":["../ts/PrimitiveTypes.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"PrimitiveTypes.js","sourceRoot":"","sources":["../ts/PrimitiveTypes.ts"],"names":[],"mappings":"AAAA,2GAA2G"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PrimitiveTypes.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimitiveTypes.spec.d.ts","sourceRoot":"","sources":["../ts/PrimitiveTypes.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { isType } from './index.js';
2
+ describe('IsNever<T>', () => {
3
+ it('checks if type is never', () => {
4
+ isType.equal();
5
+ isType.equal();
6
+ isType.equal();
7
+ isType.equal();
8
+ });
9
+ });
10
+ //# sourceMappingURL=PrimitiveTypes.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimitiveTypes.spec.js","sourceRoot":"","sources":["../ts/PrimitiveTypes.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,YAAY,CAAA;AAE5C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,KAAK,EAA8B,CAAA;QAC1C,MAAM,CAAC,KAAK,EAAgC,CAAA;QAC5C,MAAM,CAAC,KAAK,EAAuC,CAAA;QACnD,MAAM,CAAC,KAAK,EAA4B,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
package/esm/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export * from './nodejs/index.js';
11
11
  export * from './nominal-types/index.js';
12
12
  export * from './object/index.js';
13
13
  export * from './predicates/index.js';
14
- export type { PrimitiveTypes } from './PrimitiveTypes.js';
14
+ export type { PrimitiveTypes, IsNever } from './PrimitiveTypes.js';
15
15
  export * from './promise/index.js';
16
16
  export * from './testing/index.js';
17
17
  export type { UnionKeys } from './UnionKeys.js';
@@ -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,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAGlC,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,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,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClE,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAGlC,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,cAAc,kBAAkB,CAAA"}
@@ -6,17 +6,18 @@
6
6
  * This is needed for `boolean`, `string`, and `number`,
7
7
  * as they supports literal types.
8
8
  */
9
+ import { IsNever } from '../PrimitiveTypes.js';
9
10
  /**
10
11
  * Checks if two types are equal.
11
12
  */
12
13
  export declare type Equal<A, B, Then = true, Else = false> = [
13
14
  A,
14
15
  B
15
- ] extends [boolean | string | number, boolean | string | number] ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Then : Else : ([A] extends [never] ? ([B] extends [never] ? Then : Else) : (A extends B ? B extends A ? Then : Else : Else));
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
17
  export declare type IsEqual<A, B> = Equal<A, B>;
17
18
  export declare type NotEqual<A, B, Then = true, Else = false> = [
18
19
  A,
19
20
  B
20
- ] extends [boolean | string | number, boolean | string | number] ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Else : Then : ([A] extends [never] ? ([B] extends [never] ? Then : Else) : (A extends B ? B extends A ? Else : Then : Then));
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
22
  export declare type IsNotEqual<A, B> = NotEqual<A, B>;
22
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;;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,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAClB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GACnC,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,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAClB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GACnC,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,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "type-plus",
3
- "version": "4.11.3",
3
+ "version": "4.12.0",
4
4
  "description": "Provides additional types for TypeScript.",
5
5
  "homepage": "https://github.com/unional/type-plus",
6
6
  "bugs": {
@@ -1,2 +1,6 @@
1
- // eslint-disable-next-line @typescript-eslint/ban-types
2
- export type PrimitiveTypes = boolean | number | string | object | symbol | bigint | Function | undefined | null
1
+ // IsNever from @jack-williams: https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379091887
2
+
3
+ // eslint-disable-next-line @typescript-eslint/ban-types
4
+ export type PrimitiveTypes = boolean | number | string | object | symbol | bigint | Function | undefined | null
5
+
6
+ export type IsNever<T, Then = true, Else = false> = [T] extends [never] ? Then : Else
package/ts/index.ts CHANGED
@@ -12,7 +12,7 @@ export * from './nodejs/index.js'
12
12
  export * from './nominal-types/index.js'
13
13
  export * from './object/index.js'
14
14
  export * from './predicates/index.js'
15
- export type { PrimitiveTypes } from './PrimitiveTypes.js'
15
+ export type { PrimitiveTypes, IsNever } from './PrimitiveTypes.js'
16
16
  export * from './promise/index.js'
17
17
  export * from './testing/index.js'
18
18
  // export * from './types/optional.js'
@@ -7,21 +7,23 @@
7
7
  * as they supports literal types.
8
8
  */
9
9
 
10
+ import { IsNever } from '../PrimitiveTypes.js'
11
+
10
12
  /**
11
13
  * Checks if two types are equal.
12
14
  */
13
15
  export type Equal<A, B, Then = true, Else = false> =
14
16
  [A, B] extends [boolean | string | number, boolean | string | number]
15
17
  ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Then : Else
16
- : ([A] extends [never]
17
- ? ([B] extends [never] ? Then : Else)
18
+ : (IsNever<A> extends true
19
+ ? (IsNever<B> extends true ? Then : Else)
18
20
  : (A extends B ? B extends A ? Then : Else : Else))
19
21
  export type IsEqual<A, B> = Equal<A, B>
20
22
 
21
23
  export type NotEqual<A, B, Then = true, Else = false> =
22
24
  [A, B] extends [boolean | string | number, boolean | string | number]
23
25
  ? (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Else : Then
24
- : ([A] extends [never]
25
- ? ([B] extends [never] ? Then : Else)
26
+ : (IsNever<A> extends true
27
+ ? (IsNever<B> extends true ? Then : Else)
26
28
  : (A extends B ? B extends A ? Else : Then : Then))
27
29
  export type IsNotEqual<A, B> = NotEqual<A, B>