type-plus 4.14.1 → 4.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/cjs/object/record.d.ts +6 -2
- package/cjs/object/record.d.ts.map +1 -1
- package/cjs/object/record.spec.js +65 -46
- package/cjs/object/record.spec.js.map +1 -1
- package/cjs/predicates/Equal.d.ts +2 -2
- package/cjs/predicates/Equal.d.ts.map +1 -1
- package/cjs/predicates/Equal.spec.js +27 -1
- package/cjs/predicates/Equal.spec.js.map +1 -1
- package/esm/object/record.d.ts +6 -2
- package/esm/object/record.d.ts.map +1 -1
- package/esm/object/record.spec.js +65 -46
- package/esm/object/record.spec.js.map +1 -1
- package/esm/predicates/Equal.d.ts +2 -2
- package/esm/predicates/Equal.d.ts.map +1 -1
- package/esm/predicates/Equal.spec.js +27 -1
- package/esm/predicates/Equal.spec.js.map +1 -1
- package/package.json +1 -1
- package/ts/object/record.ts +7 -2
- package/ts/predicates/Equal.ts +8 -7
package/README.md
CHANGED
|
@@ -352,7 +352,7 @@ const someJson: JSONTypes = { a: { b: ['z', { c: 'miku' }]}}
|
|
|
352
352
|
JSONTypes.get<string>(someJson, 'a', 'b', 1, 'c') // miku
|
|
353
353
|
```
|
|
354
354
|
|
|
355
|
-
### Object
|
|
355
|
+
### Object utilities
|
|
356
356
|
|
|
357
357
|
- `filterKey()`: type adjusted filter by key.
|
|
358
358
|
- `findKey()`: type adjusted find by key.
|
|
@@ -362,6 +362,7 @@ JSONTypes.get<string>(someJson, 'a', 'b', 1, 'c') // miku
|
|
|
362
362
|
- `IsRecord<T>`: `logical` predicate for `Record`.
|
|
363
363
|
- `KeysWithDiffTypes<A, B>`: gets the keys common in `A` and `B` but with different value type.
|
|
364
364
|
- `mapKey()`: type adjusted map by key.
|
|
365
|
+
- `RecordValue<R>`: gets the value type `T`from `Record<any, T>` [video](https://www.youtube.com/watch?v=1J7xK6FUqPw).
|
|
365
366
|
- `reduceByKey()`: type adjusted reduce by key.
|
|
366
367
|
- `someKey()`: type adjusted some by key.
|
|
367
368
|
- `SpreadRecord<A, B>`: type for `{...a, ...b}` when both `a` and `b` are `Record`\
|
|
@@ -381,7 +382,7 @@ JSONTypes.get<string>(someJson, 'a', 'b', 1, 'c') // miku
|
|
|
381
382
|
- `as<T>(subject)`: assert `subject` as `T`. Avoid ASI issues such as `;(x as T).abc`
|
|
382
383
|
- `asAny(subject)`: assert `subject` as `any`. Avoid ASI issue such as `;(x as any).abc`
|
|
383
384
|
- `EitherAnd<A, B, [C, D]>`: combines 2 to 4 types as `A | B | (A & B)`. This is useful for combining options. **Deprecated**. Renamed to `EitherOrBoth`.
|
|
384
|
-
- `EitherOrBoth<A, B, [C, D]>`: combines 2 to 4 types as `A | B | (A & B)`. This is useful for combining options
|
|
385
|
+
- `EitherOrBoth<A, B, [C, D]>`: combines 2 to 4 types as `A | B | (A & B)`. This is useful for combining options [video](https://youtu.be/jBxx03NT4Ik).
|
|
385
386
|
- `Except<T, K>`: Deprecated. Same as `Omit<T, K>`.
|
|
386
387
|
- `ExcludePropType<T, U>`: excludes type `U` from properties in `T`.
|
|
387
388
|
- `KeyofOptional<T>`: `keyof` that works with `Record<any, any> | undefined`.
|
package/cjs/object/record.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Widen } from '../utils/index.js';
|
|
2
|
-
import { KeyTypes } from './KeyTypes.js';
|
|
1
|
+
import type { Widen } from '../utils/index.js';
|
|
2
|
+
import type { KeyTypes } from './KeyTypes.js';
|
|
3
3
|
/**
|
|
4
4
|
* Creates a `Record<Key, Value>` or your custom record.
|
|
5
5
|
* By default,
|
|
@@ -10,4 +10,8 @@ import { KeyTypes } from './KeyTypes.js';
|
|
|
10
10
|
*/
|
|
11
11
|
export declare function record<K extends KeyTypes, V>(value?: Record<K, V>): Record<Widen<K>, V>;
|
|
12
12
|
export declare function record<R extends Record<any, any>>(value?: R): R;
|
|
13
|
+
/**
|
|
14
|
+
* Gets the value type `T` from `Record<any, T>`.
|
|
15
|
+
*/
|
|
16
|
+
export declare type RecordValue<R extends Record<any, any>> = R extends Record<any, infer T> ? T : never;
|
|
13
17
|
//# sourceMappingURL=record.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../ts/object/record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../ts/object/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACxF,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;AAMhE;;GAEG;AACH,oBAAY,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA"}
|
|
@@ -1,52 +1,71 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var index_js_1 = require("../index.js");
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
describe("".concat(index_js_1.record.name, "()"), function () {
|
|
5
|
+
it('creates an empty record with value default to unknown', function () {
|
|
6
|
+
var a = (0, index_js_1.record)();
|
|
7
|
+
a[1] = 2;
|
|
8
|
+
a['a'] = 'b';
|
|
9
|
+
a[Symbol()] = true;
|
|
10
|
+
index_js_1.isType.equal();
|
|
11
|
+
});
|
|
12
|
+
it('can specify key and value types', function () {
|
|
13
|
+
var a = (0, index_js_1.record)();
|
|
14
|
+
// even though the key type is string,
|
|
15
|
+
// by default JavaScript will cast number index to string
|
|
16
|
+
// so TypeScript also allows it.
|
|
17
|
+
a[1] = 2;
|
|
18
|
+
a['a'] = 3;
|
|
19
|
+
index_js_1.isType.equal();
|
|
20
|
+
});
|
|
21
|
+
it('has no prototype', function () {
|
|
22
|
+
var a = (0, index_js_1.record)();
|
|
23
|
+
expect(Object.getPrototypeOf(a)).toBeNull();
|
|
24
|
+
});
|
|
25
|
+
it('has no prototype with initial value', function () {
|
|
26
|
+
var a = (0, index_js_1.record)({ a: 1 });
|
|
27
|
+
expect(Object.getPrototypeOf(a)).toBeNull();
|
|
28
|
+
});
|
|
29
|
+
it('infers type from initial value, the key type is widen', function () {
|
|
30
|
+
var stringRecord = (0, index_js_1.record)({ a: 1 });
|
|
31
|
+
index_js_1.isType.equal();
|
|
32
|
+
var numberRecord = (0, index_js_1.record)({ 1: 3 });
|
|
33
|
+
index_js_1.isType.equal();
|
|
34
|
+
var stringConstRecord = (0, index_js_1.record)({ a: 1 });
|
|
35
|
+
index_js_1.isType.equal();
|
|
36
|
+
var stringConstRecord2 = (0, index_js_1.record)({ a: 1 });
|
|
37
|
+
index_js_1.isType.equal();
|
|
38
|
+
var stringConstRecord3 = (0, index_js_1.record)({ a: 1, b: 'b' });
|
|
39
|
+
index_js_1.isType.equal();
|
|
40
|
+
var stringConstRecord4 = (0, index_js_1.record)({ a: 1, b: 'b' });
|
|
41
|
+
index_js_1.isType.equal();
|
|
42
|
+
});
|
|
43
|
+
it('has the keys of the initial value', function () {
|
|
44
|
+
var a = (0, index_js_1.record)({ a: 1, b: 2 });
|
|
45
|
+
expect(Object.keys(a)).toEqual(['a', 'b']);
|
|
46
|
+
});
|
|
47
|
+
it('can specify a custom record', function () {
|
|
48
|
+
var a = (0, index_js_1.record)();
|
|
49
|
+
index_js_1.isType.equal();
|
|
50
|
+
var b = (0, index_js_1.record)({ b: 'b' });
|
|
51
|
+
index_js_1.isType.equal();
|
|
52
|
+
});
|
|
10
53
|
});
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
var numberRecord = (0, index_js_1.record)({ 1: 3 });
|
|
28
|
-
index_js_1.isType.equal();
|
|
29
|
-
var stringConstRecord = (0, index_js_1.record)({ a: 1 });
|
|
30
|
-
index_js_1.isType.equal();
|
|
31
|
-
var stringConstRecord2 = (0, index_js_1.record)({ a: 1 });
|
|
32
|
-
index_js_1.isType.equal();
|
|
33
|
-
var stringConstRecord3 = (0, index_js_1.record)({ a: 1, b: 'b' });
|
|
34
|
-
index_js_1.isType.equal();
|
|
35
|
-
var stringConstRecord4 = (0, index_js_1.record)({ a: 1, b: 'b' });
|
|
36
|
-
index_js_1.isType.equal();
|
|
37
|
-
});
|
|
38
|
-
test('no prototype with initial value', function () {
|
|
39
|
-
var a = (0, index_js_1.record)({ a: 1 });
|
|
40
|
-
expect(Object.getPrototypeOf(a)).toBeNull();
|
|
41
|
-
});
|
|
42
|
-
test('Object.keys() gets the keys of the initial value', function () {
|
|
43
|
-
var a = (0, index_js_1.record)({ a: 1, b: 2 });
|
|
44
|
-
expect(Object.keys(a)).toEqual(['a', 'b']);
|
|
45
|
-
});
|
|
46
|
-
it('can specify a custom record', function () {
|
|
47
|
-
var a = (0, index_js_1.record)();
|
|
48
|
-
index_js_1.isType.equal();
|
|
49
|
-
var b = (0, index_js_1.record)({ b: 'b' });
|
|
50
|
-
index_js_1.isType.equal();
|
|
54
|
+
describe("RecordValue<R>", function () {
|
|
55
|
+
it('gets the value type from Record<any, T>', function () {
|
|
56
|
+
index_js_1.isType.equal();
|
|
57
|
+
});
|
|
58
|
+
it("gets the value type form Record<number, T>", function () {
|
|
59
|
+
index_js_1.isType.equal();
|
|
60
|
+
});
|
|
61
|
+
it("gets the value type form Record<number, T>", function () {
|
|
62
|
+
index_js_1.isType.equal();
|
|
63
|
+
});
|
|
64
|
+
it('works with union type', function () {
|
|
65
|
+
index_js_1.isType.equal();
|
|
66
|
+
});
|
|
67
|
+
it('works with intersect type', function () {
|
|
68
|
+
index_js_1.isType.equal();
|
|
69
|
+
});
|
|
51
70
|
});
|
|
52
71
|
//# sourceMappingURL=record.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.spec.js","sourceRoot":"","sources":["../../ts/object/record.spec.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"record.spec.js","sourceRoot":"","sources":["../../ts/object/record.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 [
|
|
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 [
|
|
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,
|
|
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
|
-
|
|
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":";;AAAA,
|
|
1
|
+
{"version":3,"file":"Equal.spec.js","sourceRoot":"","sources":["../../ts/predicates/Equal.spec.ts"],"names":[],"mappings":"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"}
|
package/esm/object/record.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Widen } from '../utils/index.js';
|
|
2
|
-
import { KeyTypes } from './KeyTypes.js';
|
|
1
|
+
import type { Widen } from '../utils/index.js';
|
|
2
|
+
import type { KeyTypes } from './KeyTypes.js';
|
|
3
3
|
/**
|
|
4
4
|
* Creates a `Record<Key, Value>` or your custom record.
|
|
5
5
|
* By default,
|
|
@@ -10,4 +10,8 @@ import { KeyTypes } from './KeyTypes.js';
|
|
|
10
10
|
*/
|
|
11
11
|
export declare function record<K extends KeyTypes, V>(value?: Record<K, V>): Record<Widen<K>, V>;
|
|
12
12
|
export declare function record<R extends Record<any, any>>(value?: R): R;
|
|
13
|
+
/**
|
|
14
|
+
* Gets the value type `T` from `Record<any, T>`.
|
|
15
|
+
*/
|
|
16
|
+
export declare type RecordValue<R extends Record<any, any>> = R extends Record<any, infer T> ? T : never;
|
|
13
17
|
//# sourceMappingURL=record.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../ts/object/record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../ts/object/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACxF,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;AAMhE;;GAEG;AACH,oBAAY,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA"}
|
|
@@ -1,50 +1,69 @@
|
|
|
1
1
|
import { isType, record } from '../index.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
describe(`${record.name}()`, () => {
|
|
3
|
+
it('creates an empty record with value default to unknown', () => {
|
|
4
|
+
const a = record();
|
|
5
|
+
a[1] = 2;
|
|
6
|
+
a['a'] = 'b';
|
|
7
|
+
a[Symbol()] = true;
|
|
8
|
+
isType.equal();
|
|
9
|
+
});
|
|
10
|
+
it('can specify key and value types', () => {
|
|
11
|
+
const a = record();
|
|
12
|
+
// even though the key type is string,
|
|
13
|
+
// by default JavaScript will cast number index to string
|
|
14
|
+
// so TypeScript also allows it.
|
|
15
|
+
a[1] = 2;
|
|
16
|
+
a['a'] = 3;
|
|
17
|
+
isType.equal();
|
|
18
|
+
});
|
|
19
|
+
it('has no prototype', () => {
|
|
20
|
+
const a = record();
|
|
21
|
+
expect(Object.getPrototypeOf(a)).toBeNull();
|
|
22
|
+
});
|
|
23
|
+
it('has no prototype with initial value', () => {
|
|
24
|
+
const a = record({ a: 1 });
|
|
25
|
+
expect(Object.getPrototypeOf(a)).toBeNull();
|
|
26
|
+
});
|
|
27
|
+
it('infers type from initial value, the key type is widen', () => {
|
|
28
|
+
const stringRecord = record({ a: 1 });
|
|
29
|
+
isType.equal();
|
|
30
|
+
const numberRecord = record({ 1: 3 });
|
|
31
|
+
isType.equal();
|
|
32
|
+
const stringConstRecord = record({ a: 1 });
|
|
33
|
+
isType.equal();
|
|
34
|
+
const stringConstRecord2 = record({ a: 1 });
|
|
35
|
+
isType.equal();
|
|
36
|
+
const stringConstRecord3 = record({ a: 1, b: 'b' });
|
|
37
|
+
isType.equal();
|
|
38
|
+
const stringConstRecord4 = record({ a: 1, b: 'b' });
|
|
39
|
+
isType.equal();
|
|
40
|
+
});
|
|
41
|
+
it('has the keys of the initial value', () => {
|
|
42
|
+
const a = record({ a: 1, b: 2 });
|
|
43
|
+
expect(Object.keys(a)).toEqual(['a', 'b']);
|
|
44
|
+
});
|
|
45
|
+
it('can specify a custom record', () => {
|
|
46
|
+
const a = record();
|
|
47
|
+
isType.equal();
|
|
48
|
+
const b = record({ b: 'b' });
|
|
49
|
+
isType.equal();
|
|
50
|
+
});
|
|
8
51
|
});
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const numberRecord = record({ 1: 3 });
|
|
26
|
-
isType.equal();
|
|
27
|
-
const stringConstRecord = record({ a: 1 });
|
|
28
|
-
isType.equal();
|
|
29
|
-
const stringConstRecord2 = record({ a: 1 });
|
|
30
|
-
isType.equal();
|
|
31
|
-
const stringConstRecord3 = record({ a: 1, b: 'b' });
|
|
32
|
-
isType.equal();
|
|
33
|
-
const stringConstRecord4 = record({ a: 1, b: 'b' });
|
|
34
|
-
isType.equal();
|
|
35
|
-
});
|
|
36
|
-
test('no prototype with initial value', () => {
|
|
37
|
-
const a = record({ a: 1 });
|
|
38
|
-
expect(Object.getPrototypeOf(a)).toBeNull();
|
|
39
|
-
});
|
|
40
|
-
test('Object.keys() gets the keys of the initial value', () => {
|
|
41
|
-
const a = record({ a: 1, b: 2 });
|
|
42
|
-
expect(Object.keys(a)).toEqual(['a', 'b']);
|
|
43
|
-
});
|
|
44
|
-
it('can specify a custom record', () => {
|
|
45
|
-
const a = record();
|
|
46
|
-
isType.equal();
|
|
47
|
-
const b = record({ b: 'b' });
|
|
48
|
-
isType.equal();
|
|
52
|
+
describe(`RecordValue<R>`, () => {
|
|
53
|
+
it('gets the value type from Record<any, T>', () => {
|
|
54
|
+
isType.equal();
|
|
55
|
+
});
|
|
56
|
+
it(`gets the value type form Record<number, T>`, () => {
|
|
57
|
+
isType.equal();
|
|
58
|
+
});
|
|
59
|
+
it(`gets the value type form Record<number, T>`, () => {
|
|
60
|
+
isType.equal();
|
|
61
|
+
});
|
|
62
|
+
it('works with union type', () => {
|
|
63
|
+
isType.equal();
|
|
64
|
+
});
|
|
65
|
+
it('works with intersect type', () => {
|
|
66
|
+
isType.equal();
|
|
67
|
+
});
|
|
49
68
|
});
|
|
50
69
|
//# sourceMappingURL=record.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.spec.js","sourceRoot":"","sources":["../../ts/object/record.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAY,MAAM,
|
|
1
|
+
{"version":3,"file":"record.spec.js","sourceRoot":"","sources":["../../ts/object/record.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 [
|
|
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 [
|
|
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,
|
|
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
|
-
|
|
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":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Equal.spec.js","sourceRoot":"","sources":["../../ts/predicates/Equal.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/ts/object/record.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Widen } from '../utils/index.js'
|
|
1
|
+
import type { Widen } from '../utils/index.js'
|
|
2
2
|
import type { AnyRecord } from './AnyRecord.js'
|
|
3
|
-
import { KeyTypes } from './KeyTypes.js'
|
|
3
|
+
import type { KeyTypes } from './KeyTypes.js'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Creates a `Record<Key, Value>` or your custom record.
|
|
@@ -16,3 +16,8 @@ export function record(value?: any) {
|
|
|
16
16
|
const r = Object.create(null) as AnyRecord
|
|
17
17
|
return (value ? Object.assign(r, value) : r) as AnyRecord
|
|
18
18
|
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Gets the value type `T` from `Record<any, T>`.
|
|
22
|
+
*/
|
|
23
|
+
export type RecordValue<R extends Record<any, any>> = R extends Record<any, infer T> ? T : never
|
package/ts/predicates/Equal.ts
CHANGED
|
@@ -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 [
|
|
17
|
-
? (<
|
|
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 [
|
|
25
|
-
? (<
|
|
26
|
-
|
|
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>
|