type-plus 4.4.2 → 4.5.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.
Files changed (116) hide show
  1. package/README.md +1 -0
  2. package/cjs/ComposableTypes.d.ts +0 -6
  3. package/cjs/JSONTypes.js +0 -1
  4. package/cjs/JSONTypes.js.map +1 -1
  5. package/cjs/UnionKeys.d.ts +0 -4
  6. package/cjs/array/CommonPropKeys.d.ts +0 -7
  7. package/cjs/array/CreateTuple.d.ts +10 -8
  8. package/cjs/array/Filter.d.ts +1 -1
  9. package/cjs/array/FindFirst.d.ts +0 -3
  10. package/cjs/array/IntersectOfProps.d.ts +0 -7
  11. package/cjs/array/Last.d.ts +0 -3
  12. package/cjs/array/Tail.d.ts +0 -3
  13. package/cjs/array/UnionOfProps.d.ts +0 -7
  14. package/cjs/array/UnionOfValues.d.ts +0 -7
  15. package/cjs/assertion/assertType.d.ts +0 -4
  16. package/cjs/assertion/assertType.js +0 -8
  17. package/cjs/assertion/assertType.js.map +1 -1
  18. package/cjs/functional/ChainFn.d.ts +0 -3
  19. package/cjs/functional/compose.d.ts +0 -3
  20. package/cjs/functional/compose.js +0 -3
  21. package/cjs/functional/compose.js.map +1 -1
  22. package/cjs/index.js +0 -2
  23. package/cjs/index.js.map +1 -1
  24. package/cjs/math/Add.d.ts +0 -6
  25. package/cjs/math/Digit.d.ts +0 -3
  26. package/cjs/math/IsPositive.d.ts +0 -5
  27. package/cjs/math/IsWhole.d.ts +0 -5
  28. package/cjs/math/Subtract.d.ts +0 -3
  29. package/cjs/nodejs/isNodeError.d.ts +0 -5
  30. package/cjs/nodejs/isNodeError.js +0 -5
  31. package/cjs/nodejs/isNodeError.js.map +1 -1
  32. package/cjs/nominal-types/Brand.d.ts +0 -10
  33. package/cjs/nominal-types/Brand.js +0 -3
  34. package/cjs/nominal-types/Brand.js.map +1 -1
  35. package/cjs/nominal-types/Flavor.d.ts +0 -12
  36. package/cjs/nominal-types/Flavor.js +0 -3
  37. package/cjs/nominal-types/Flavor.js.map +1 -1
  38. package/cjs/object/ExcludePropType.d.ts +0 -3
  39. package/cjs/object/IsDisjoint.d.ts +0 -4
  40. package/cjs/object/KeyTypes.d.ts +0 -5
  41. package/cjs/object/KeyofOptional.d.ts +0 -3
  42. package/cjs/object/KnownKeys.js +0 -3
  43. package/cjs/object/KnownKeys.js.map +1 -1
  44. package/cjs/object/Partial.d.ts +0 -9
  45. package/cjs/object/RecursiveIntersect.d.ts +0 -11
  46. package/cjs/object/Required.js +0 -1
  47. package/cjs/object/Required.js.map +1 -1
  48. package/cjs/object/facade.d.ts +0 -3
  49. package/cjs/object/facade.js +0 -3
  50. package/cjs/object/facade.js.map +1 -1
  51. package/cjs/object/index.d.ts +1 -0
  52. package/cjs/object/index.js +1 -0
  53. package/cjs/object/index.js.map +1 -1
  54. package/cjs/object/mapProperties.d.ts +0 -8
  55. package/cjs/object/mapProperties.js +0 -8
  56. package/cjs/object/mapProperties.js.map +1 -1
  57. package/cjs/object/omit.d.ts +0 -3
  58. package/cjs/object/pick.d.ts +0 -7
  59. package/cjs/object/record.d.ts +3 -0
  60. package/cjs/object/record.js +9 -0
  61. package/cjs/object/record.js.map +1 -0
  62. package/cjs/object/reduceKey.d.ts +0 -3
  63. package/cjs/object/reduceKey.js +0 -3
  64. package/cjs/object/reduceKey.js.map +1 -1
  65. package/cjs/object/split.d.ts +0 -4
  66. package/cjs/predicates/CanAssign.d.ts +0 -3
  67. package/cjs/predicates/Equal.d.ts +0 -6
  68. package/cjs/predicates/isType.js +0 -6
  69. package/cjs/predicates/isType.js.map +1 -1
  70. package/cjs/promise/PromiseValue.d.ts +0 -3
  71. package/cjs/promise/PromiseValueMerge.d.ts +0 -3
  72. package/cjs/promise/isPromise.js +0 -1
  73. package/cjs/promise/isPromise.js.map +1 -1
  74. package/cjs/utils/Widen.d.ts +0 -4
  75. package/esm/JSONTypes.js +0 -1
  76. package/esm/JSONTypes.js.map +1 -1
  77. package/esm/assertion/assertType.js +0 -8
  78. package/esm/assertion/assertType.js.map +1 -1
  79. package/esm/functional/compose.js +0 -3
  80. package/esm/functional/compose.js.map +1 -1
  81. package/esm/index.js +0 -2
  82. package/esm/index.js.map +1 -1
  83. package/esm/nodejs/isNodeError.js +0 -5
  84. package/esm/nodejs/isNodeError.js.map +1 -1
  85. package/esm/nominal-types/Brand.js +0 -3
  86. package/esm/nominal-types/Brand.js.map +1 -1
  87. package/esm/nominal-types/Flavor.js +0 -3
  88. package/esm/nominal-types/Flavor.js.map +1 -1
  89. package/esm/object/KnownKeys.js +0 -3
  90. package/esm/object/KnownKeys.js.map +1 -1
  91. package/esm/object/Required.js +0 -1
  92. package/esm/object/Required.js.map +1 -1
  93. package/esm/object/facade.js +0 -3
  94. package/esm/object/facade.js.map +1 -1
  95. package/esm/object/index.js +1 -0
  96. package/esm/object/index.js.map +1 -1
  97. package/esm/object/mapProperties.js +0 -8
  98. package/esm/object/mapProperties.js.map +1 -1
  99. package/esm/object/record.js +5 -0
  100. package/esm/object/record.js.map +1 -0
  101. package/esm/object/reduceKey.js +0 -3
  102. package/esm/object/reduceKey.js.map +1 -1
  103. package/esm/predicates/isType.js +0 -6
  104. package/esm/predicates/isType.js.map +1 -1
  105. package/esm/promise/isPromise.js +0 -1
  106. package/esm/promise/isPromise.js.map +1 -1
  107. package/package.json +1 -1
  108. package/ts/array/CreateTuple.spec.ts +32 -21
  109. package/ts/array/CreateTuple.ts +22 -7
  110. package/ts/array/Filter.spec.ts +54 -21
  111. package/ts/array/Filter.ts +17 -12
  112. package/ts/math/Add.spec.ts +82 -82
  113. package/ts/math/Digit.spec.ts +184 -185
  114. package/ts/object/index.ts +1 -0
  115. package/ts/object/record.spec.ts +54 -0
  116. package/ts/object/record.ts +10 -0
@@ -21,6 +21,7 @@ export * from './omit'
21
21
  export type { OptionalKeys } from './OptionalKeys'
22
22
  export type { PartialExcept, PartialOmit, PartialPick } from './Partial'
23
23
  export * from './pick'
24
+ export * from './record'
24
25
  export type { RecursiveIntersect } from './RecursiveIntersect'
25
26
  export type { RecursivePartial } from './RecursivePartial'
26
27
  export type { RecursiveRequired } from './RecursiveRequired'
@@ -0,0 +1,54 @@
1
+ import { isType, KeyTypes, record } from '..'
2
+
3
+ test('create 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<true, Record<KeyTypes, unknown>, typeof a>()
9
+ })
10
+
11
+ test('specify key and value types', () => {
12
+ const a = record<string, number>()
13
+ // even though the key type is string,
14
+ // by default JavaScript will cast number index to string
15
+ // so TypeScript also allows it.
16
+ a[1] = 2
17
+ a['a'] = 3
18
+ isType.equal<true, Record<string, number>, typeof a>()
19
+ })
20
+
21
+ test('no prototype', () => {
22
+ const a = record()
23
+ expect(Object.getPrototypeOf(a)).toBeNull()
24
+ })
25
+
26
+ test('infer type from initial value, the key type is widen', () => {
27
+ const stringRecord = record({ a: 1 })
28
+ isType.equal<true, Record<string, number>, typeof stringRecord>()
29
+
30
+ const numberRecord = record({ 1: 3 })
31
+ isType.equal<true, Record<number, number>, typeof numberRecord>()
32
+
33
+ const stringConstRecord = record({ a: 1 } as const)
34
+ isType.equal<true, Record<string, 1>, typeof stringConstRecord>()
35
+
36
+ const stringConstRecord2 = record({ a: 1 as const })
37
+ isType.equal<true, Record<string, 1>, typeof stringConstRecord2>()
38
+
39
+ const stringConstRecord3 = record({ a: 1 as const, b: 'b' })
40
+ isType.equal<true, Record<string, 1 | string>, typeof stringConstRecord3>()
41
+
42
+ const stringConstRecord4 = record({ a: 1 as const, b: 'b' as const })
43
+ isType.equal<true, Record<string, 1 | 'b'>, typeof stringConstRecord4>()
44
+ })
45
+
46
+ test('no prototype with initial value', () => {
47
+ const a = record({ a: 1 })
48
+ expect(Object.getPrototypeOf(a)).toBeNull()
49
+ })
50
+
51
+ test('Object.keys() gets the keys of the initial value', () => {
52
+ const a = record({ a: 1, b: 2 })
53
+ expect(Object.keys(a)).toEqual(['a', 'b'])
54
+ })
@@ -0,0 +1,10 @@
1
+ import { KeyTypes } from 'type-plus'
2
+ import { Widen } from '../utils'
3
+
4
+ /**
5
+ * Creates a `Record<Key, Value>`
6
+ */
7
+ export function record<K extends KeyTypes, V>(value?: Record<K, V>): Record<Widen<K>, V> {
8
+ const r = Object.create(null)
9
+ return value ? Object.assign(r, value) : r
10
+ }