type-plus 7.4.0 → 7.6.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.
Files changed (202) hide show
  1. package/README.md +81 -92
  2. package/cjs/array/array.entries.d.ts +4 -3
  3. package/cjs/array/array.entries.d.ts.map +1 -1
  4. package/cjs/array/array_index.d.ts +4 -1
  5. package/cjs/array/array_index.d.ts.map +1 -1
  6. package/cjs/array/array_plus.common_prop_keys.d.ts +27 -0
  7. package/cjs/array/array_plus.common_prop_keys.d.ts.map +1 -0
  8. package/cjs/array/array_plus.common_prop_keys.js +3 -0
  9. package/cjs/array/array_plus.common_prop_keys.js.map +1 -0
  10. package/cjs/array/array_plus.d.ts +6 -3
  11. package/cjs/array/array_plus.d.ts.map +1 -1
  12. package/cjs/array/array_plus.drop_match.d.ts +4 -0
  13. package/cjs/array/array_plus.drop_match.d.ts.map +1 -0
  14. package/cjs/array/array_plus.drop_match.js +3 -0
  15. package/cjs/array/array_plus.drop_match.js.map +1 -0
  16. package/cjs/array/array_plus.element_match.d.ts +44 -0
  17. package/cjs/array/array_plus.element_match.d.ts.map +1 -0
  18. package/cjs/array/array_plus.element_match.js +3 -0
  19. package/cjs/array/array_plus.element_match.js.map +1 -0
  20. package/cjs/array/array_plus.find.d.ts +57 -0
  21. package/cjs/array/array_plus.find.d.ts.map +1 -0
  22. package/cjs/array/array_plus.find.js +3 -0
  23. package/cjs/array/array_plus.find.js.map +1 -0
  24. package/cjs/array/array_plus.split_at.d.ts +20 -15
  25. package/cjs/array/array_plus.split_at.d.ts.map +1 -1
  26. package/cjs/array/find_first.d.ts +62 -0
  27. package/cjs/array/find_first.d.ts.map +1 -0
  28. package/cjs/array/{array.find.js → find_first.js} +1 -1
  29. package/cjs/array/find_first.js.map +1 -0
  30. package/cjs/array/head.d.ts +18 -6
  31. package/cjs/array/head.d.ts.map +1 -1
  32. package/cjs/array/last.d.ts +17 -6
  33. package/cjs/array/last.d.ts.map +1 -1
  34. package/cjs/assertion/assert_type.d.ts +4 -1
  35. package/cjs/assertion/assert_type.d.ts.map +1 -1
  36. package/cjs/assertion/assert_type.js.map +1 -1
  37. package/cjs/index.d.ts +5 -2
  38. package/cjs/index.d.ts.map +1 -1
  39. package/cjs/index.js.map +1 -1
  40. package/cjs/never/never_type.d.ts +11 -0
  41. package/cjs/never/never_type.d.ts.map +1 -1
  42. package/cjs/object/index.d.ts +0 -1
  43. package/cjs/object/index.d.ts.map +1 -1
  44. package/cjs/object/index.js.map +1 -1
  45. package/cjs/testing/test_type.d.ts +277 -276
  46. package/cjs/testing/test_type.d.ts.map +1 -1
  47. package/cjs/testing/test_type.js.map +1 -1
  48. package/cjs/tuple/common_prop_keys.d.ts +15 -10
  49. package/cjs/tuple/common_prop_keys.d.ts.map +1 -1
  50. package/cjs/tuple/drop.d.ts +45 -26
  51. package/cjs/tuple/drop.d.ts.map +1 -1
  52. package/cjs/tuple/drop.js.map +1 -1
  53. package/cjs/tuple/tuple_plus.common_prop_keys.d.ts +28 -0
  54. package/cjs/tuple/tuple_plus.common_prop_keys.d.ts.map +1 -0
  55. package/cjs/tuple/tuple_plus.common_prop_keys.js +3 -0
  56. package/cjs/tuple/tuple_plus.common_prop_keys.js.map +1 -0
  57. package/cjs/tuple/tuple_plus.d.ts +3 -0
  58. package/cjs/tuple/tuple_plus.d.ts.map +1 -1
  59. package/cjs/tuple/tuple_plus.drop_match.d.ts +6 -0
  60. package/cjs/tuple/tuple_plus.drop_match.d.ts.map +1 -0
  61. package/cjs/tuple/tuple_plus.drop_match.js +3 -0
  62. package/cjs/tuple/tuple_plus.drop_match.js.map +1 -0
  63. package/cjs/tuple/tuple_plus.filter.d.ts +2 -2
  64. package/cjs/tuple/tuple_plus.find.d.ts +64 -0
  65. package/cjs/tuple/tuple_plus.find.d.ts.map +1 -0
  66. package/cjs/tuple/tuple_plus.find.js +3 -0
  67. package/cjs/tuple/tuple_plus.find.js.map +1 -0
  68. package/cjs/tuple/tuple_plus.pad_start.d.ts +7 -6
  69. package/cjs/tuple/tuple_plus.pad_start.d.ts.map +1 -1
  70. package/cjs/tuple/tuple_type.d.ts +41 -23
  71. package/cjs/tuple/tuple_type.d.ts.map +1 -1
  72. package/cjs/union/union.d.ts +33 -0
  73. package/cjs/union/union.d.ts.map +1 -0
  74. package/cjs/union/union.js +3 -0
  75. package/cjs/union/union.js.map +1 -0
  76. package/cjs/unknown/unknown_type.d.ts +12 -0
  77. package/cjs/unknown/unknown_type.d.ts.map +1 -1
  78. package/cjs/utils/options.d.ts +10 -0
  79. package/cjs/utils/options.d.ts.map +1 -0
  80. package/cjs/utils/options.js +3 -0
  81. package/cjs/utils/options.js.map +1 -0
  82. package/esm/array/array.entries.d.ts +4 -3
  83. package/esm/array/array.entries.d.ts.map +1 -1
  84. package/esm/array/array_index.d.ts +4 -1
  85. package/esm/array/array_index.d.ts.map +1 -1
  86. package/esm/array/array_plus.common_prop_keys.d.ts +27 -0
  87. package/esm/array/array_plus.common_prop_keys.d.ts.map +1 -0
  88. package/esm/array/array_plus.common_prop_keys.js +2 -0
  89. package/esm/array/array_plus.common_prop_keys.js.map +1 -0
  90. package/esm/array/array_plus.d.ts +6 -3
  91. package/esm/array/array_plus.d.ts.map +1 -1
  92. package/esm/array/array_plus.drop_match.d.ts +4 -0
  93. package/esm/array/array_plus.drop_match.d.ts.map +1 -0
  94. package/esm/array/array_plus.drop_match.js +2 -0
  95. package/esm/array/array_plus.drop_match.js.map +1 -0
  96. package/esm/array/array_plus.element_match.d.ts +44 -0
  97. package/esm/array/array_plus.element_match.d.ts.map +1 -0
  98. package/esm/array/array_plus.element_match.js +2 -0
  99. package/esm/array/array_plus.element_match.js.map +1 -0
  100. package/esm/array/array_plus.find.d.ts +57 -0
  101. package/esm/array/array_plus.find.d.ts.map +1 -0
  102. package/esm/array/array_plus.find.js +2 -0
  103. package/esm/array/array_plus.find.js.map +1 -0
  104. package/esm/array/array_plus.split_at.d.ts +20 -15
  105. package/esm/array/array_plus.split_at.d.ts.map +1 -1
  106. package/esm/array/find_first.d.ts +62 -0
  107. package/esm/array/find_first.d.ts.map +1 -0
  108. package/esm/array/find_first.js +2 -0
  109. package/esm/array/find_first.js.map +1 -0
  110. package/esm/array/head.d.ts +18 -6
  111. package/esm/array/head.d.ts.map +1 -1
  112. package/esm/array/last.d.ts +17 -6
  113. package/esm/array/last.d.ts.map +1 -1
  114. package/esm/assertion/assert_type.d.ts +4 -1
  115. package/esm/assertion/assert_type.d.ts.map +1 -1
  116. package/esm/assertion/assert_type.js.map +1 -1
  117. package/esm/index.d.ts +5 -2
  118. package/esm/index.d.ts.map +1 -1
  119. package/esm/index.js.map +1 -1
  120. package/esm/never/never_type.d.ts +11 -0
  121. package/esm/never/never_type.d.ts.map +1 -1
  122. package/esm/object/index.d.ts +0 -1
  123. package/esm/object/index.d.ts.map +1 -1
  124. package/esm/object/index.js.map +1 -1
  125. package/esm/testing/test_type.d.ts +277 -276
  126. package/esm/testing/test_type.d.ts.map +1 -1
  127. package/esm/testing/test_type.js.map +1 -1
  128. package/esm/tuple/common_prop_keys.d.ts +15 -10
  129. package/esm/tuple/common_prop_keys.d.ts.map +1 -1
  130. package/esm/tuple/drop.d.ts +45 -26
  131. package/esm/tuple/drop.d.ts.map +1 -1
  132. package/esm/tuple/drop.js.map +1 -1
  133. package/esm/tuple/tuple_plus.common_prop_keys.d.ts +28 -0
  134. package/esm/tuple/tuple_plus.common_prop_keys.d.ts.map +1 -0
  135. package/esm/tuple/tuple_plus.common_prop_keys.js +2 -0
  136. package/esm/tuple/tuple_plus.common_prop_keys.js.map +1 -0
  137. package/esm/tuple/tuple_plus.d.ts +3 -0
  138. package/esm/tuple/tuple_plus.d.ts.map +1 -1
  139. package/esm/tuple/tuple_plus.drop_match.d.ts +6 -0
  140. package/esm/tuple/tuple_plus.drop_match.d.ts.map +1 -0
  141. package/esm/tuple/tuple_plus.drop_match.js +2 -0
  142. package/esm/tuple/tuple_plus.drop_match.js.map +1 -0
  143. package/esm/tuple/tuple_plus.filter.d.ts +2 -2
  144. package/esm/tuple/tuple_plus.find.d.ts +64 -0
  145. package/esm/tuple/tuple_plus.find.d.ts.map +1 -0
  146. package/esm/tuple/tuple_plus.find.js +2 -0
  147. package/esm/tuple/tuple_plus.find.js.map +1 -0
  148. package/esm/tuple/tuple_plus.pad_start.d.ts +7 -6
  149. package/esm/tuple/tuple_plus.pad_start.d.ts.map +1 -1
  150. package/esm/tuple/tuple_type.d.ts +41 -23
  151. package/esm/tuple/tuple_type.d.ts.map +1 -1
  152. package/esm/union/union.d.ts +33 -0
  153. package/esm/union/union.d.ts.map +1 -0
  154. package/esm/union/union.js +2 -0
  155. package/esm/union/union.js.map +1 -0
  156. package/esm/unknown/unknown_type.d.ts +12 -0
  157. package/esm/unknown/unknown_type.d.ts.map +1 -1
  158. package/esm/utils/options.d.ts +10 -0
  159. package/esm/utils/options.d.ts.map +1 -0
  160. package/esm/utils/options.js +2 -0
  161. package/esm/utils/options.js.map +1 -0
  162. package/package.json +12 -1
  163. package/ts/array/array.entries.ts +4 -2
  164. package/ts/array/array_index.ts +33 -23
  165. package/ts/array/array_plus.common_prop_keys.ts +35 -0
  166. package/ts/array/array_plus.drop_match.ts +16 -0
  167. package/ts/array/array_plus.element_match.ts +61 -0
  168. package/ts/array/array_plus.find.ts +71 -0
  169. package/ts/array/array_plus.split_at.ts +52 -23
  170. package/ts/array/array_plus.ts +6 -3
  171. package/ts/array/find_first.ts +71 -0
  172. package/ts/array/head.ts +28 -6
  173. package/ts/array/last.ts +26 -6
  174. package/ts/array/readme.md +152 -32
  175. package/ts/assertion/assert_type.ts +4 -1
  176. package/ts/assertion/readme.md +3 -2
  177. package/ts/index.ts +5 -5
  178. package/ts/never/never_type.ts +13 -0
  179. package/ts/object/index.ts +0 -1
  180. package/ts/testing/test_type.ts +279 -277
  181. package/ts/tuple/common_prop_keys.ts +18 -32
  182. package/ts/tuple/drop.ts +61 -60
  183. package/ts/tuple/readme.md +178 -39
  184. package/ts/tuple/tuple_plus.common_prop_keys.ts +47 -0
  185. package/ts/tuple/tuple_plus.drop_match.ts +20 -0
  186. package/ts/tuple/tuple_plus.filter.ts +2 -2
  187. package/ts/tuple/tuple_plus.find.ts +88 -0
  188. package/ts/tuple/tuple_plus.pad_start.ts +28 -25
  189. package/ts/tuple/tuple_plus.ts +3 -0
  190. package/ts/tuple/tuple_type.ts +67 -25
  191. package/ts/union/readme.md +81 -0
  192. package/ts/union/union.ts +37 -0
  193. package/ts/unknown/unknown_type.ts +13 -0
  194. package/ts/utils/options.ts +10 -0
  195. package/cjs/array/array.find.d.ts +0 -23
  196. package/cjs/array/array.find.d.ts.map +0 -1
  197. package/cjs/array/array.find.js.map +0 -1
  198. package/esm/array/array.find.d.ts +0 -23
  199. package/esm/array/array.find.d.ts.map +0 -1
  200. package/esm/array/array.find.js +0 -2
  201. package/esm/array/array.find.js.map +0 -1
  202. package/ts/array/array.find.ts +0 -34
@@ -22,214 +22,282 @@ import type { IsTuple } from '../tuple/tuple_type.js';
22
22
  import type { IsUndefined } from '../undefined/undefined_type.js';
23
23
  import type { IsUnknown } from '../unknown/unknown_type.js';
24
24
  import type { IsVoid } from '../void/void_type.js';
25
- interface TestType {
26
- /**
27
- * Check if type `A` is equal to type `B` and `C`.
28
- *
29
- * @return `expected` as `A` for type inspection.
30
- */
31
- equal<A, B, C>(expected: IsEqual<A, B> & IsEqual<A, C>): A;
32
- /**
33
- * Check if type `A` is equal to type `B`.
34
- *
35
- * @return `expected` as `A` for type inspection.
36
- */
37
- equal<A, B>(expected: IsEqual<A, B>): A;
38
- /**
39
- * Check if `A` can assign to `B`.
40
- *
41
- * If `A` is a union,
42
- * the check is distributive.
43
- *
44
- * Meaning the result can be `boolean`,
45
- * meaning both `true` and `false` will pass.
46
- *
47
- * If you want to avoid the distributivity,
48
- * use `testType.strictCanAssign()` instead.
49
- *
50
- * @example
51
- * ```ts
52
- * testType.canAssign<123, number> // true
53
- *
54
- * testType.canAssign<number | string, number> // boolean
55
- * ```
56
- *
57
- * @return `expected` as `A` for type inspection.
58
- */
59
- canAssign<A, B>(expected: CanAssign<A, B>): A;
60
- /**
61
- * Check if `A` can fully assign to `B`.
62
- *
63
- * This checks all branches in an union `A` are assignable to `B`.
64
- *
65
- * @example
66
- * ```ts
67
- * testType.strictCanAssign<number | string, number | string> // true
68
- *
69
- * testType.strictCanAssign<number | string, number> // false
70
- * ```
71
- *
72
- * @return `expected` as `A` for type inspection.
73
- */
74
- strictCanAssign<A, B>(expected: StrictCanAssign<A, B>): A;
75
- /**
76
- * Check if type `T` is exactly `any`.
77
- *
78
- * @return `expected` as `T` for type inspection.
79
- */
80
- any<T>(expected: IsAny<T>): T;
81
- /**
82
- * Check if type `T` is exactly `array`.
83
- *
84
- * @return `expected` as `T` for type inspection.
85
- */
86
- array<T>(expected: IsArray<T>): T;
87
- /**
88
- * Check if type `T` is exactly `bigint`.
89
- *
90
- * @return `expected` as `T` for type inspection.
91
- */
92
- strictBigint<T>(expected: IsStrictBigint<T>): T;
93
- /**
94
- * Check if type `T` is `bigint` or bigint literals.
95
- *
96
- * @return `expected` as `T` for type inspection.
97
- */
98
- bigint<T>(expected: IsBigint<T>): T;
99
- /**
100
- * Check if type `T` is exactly `boolean`.
101
- *
102
- * @return `expected` as `T` for type inspection.
103
- */
104
- strictBoolean<T>(expected: IsStrictBoolean<T>): T;
105
- /**
106
- * Check if type `T` is `boolean` and boolean literals.
107
- *
108
- * @return `expected` as `T` for type inspection.
109
- */
110
- boolean<T>(expected: IsBoolean<T>): T;
111
- /**
112
- * Check if type `T` is exactly `true`.
113
- *
114
- * @return `expected` as `T` for type inspection.
115
- */
116
- true<T>(expected: IsTrue<T>): T;
117
- /**
118
- * Check if type `T` is exactly `false`.
119
- *
120
- * @return `expected` as `T` for type inspection.
121
- */
122
- false<T>(expected: IsFalse<T>): T;
123
- /**
124
- * Check if type `T` is exactly `boolean`.
125
- *
126
- * @return `expected` as `T` for type inspection.
127
- */
128
- strictFunction<T>(expected: IsStrictFunction<T>): T;
129
- /**
130
- * Check if type `T` is `boolean` and boolean literals.
131
- *
132
- * @return `expected` as `T` for type inspection.
133
- */
134
- function<T>(expected: IsFunction<T>): T;
135
- /**
136
- * Check if type `T` is exactly `never`.
137
- *
138
- * @return `expected` as `T` for type inspection.
139
- */
140
- never<T>(expected: IsNever<T>): T;
141
- /**
142
- * Check if type `T` is exactly `null`.
143
- *
144
- * @return `expected` as `T` for type inspection.
145
- */
146
- null<T>(expected: IsNull<T>): T;
147
- /**
148
- * Check if type `T` is exactly `number`.
149
- *
150
- * @return `expected` as `T` for type inspection.
151
- */
152
- strictNumber<T>(expected: IsStrictNumber<T>): T;
153
- /**
154
- * Check if type `T` is `number` or number literals.
155
- *
156
- * @return `expected` as `T` for type inspection.
157
- */
158
- number<T>(expected: IsNumber<T>): T;
159
- /**
160
- * Check if type `T` is `object`.
161
- *
162
- * Note that `Function`, `Array`, and *tuple* are also `object`.
163
- *
164
- * @return `expected` as `T` for type inspection.
165
- */
166
- object<T>(expected: IsObject<T>): T;
167
- /**
168
- * Check if type `T` is exactly `string`.
169
- *
170
- * @return `expected` as `T` for type inspection.
171
- */
172
- strictString<T>(expected: IsStrictString<T>): T;
173
- /**
174
- * Check if type `T` is `string` or string literals.
175
- *
176
- * @return `expected` as `T` for type inspection.
177
- */
178
- string<T>(expected: IsString<T>): T;
179
- /**
180
- * Check if type `T` is a `symbol`.
181
- *
182
- * @return `expected` as `T` for type inspection.
183
- */
184
- symbol<T>(expected: IsSymbol<T>): T;
185
- /**
186
- * Check if type `T` is a *tuple*.
187
- *
188
- * @return `expected` as `T` for type inspection.
189
- */
190
- tuple<T>(expected: IsTuple<T>): T;
191
- /**
192
- * Check if type `T` is exactly `undefined`.
193
- *
194
- * @return `expected` as `T` for type inspection.
195
- */
196
- undefined<T>(expected: IsUndefined<T>): T;
197
- /**
198
- * Check if type `T` is exactly `unknown`.
199
- *
200
- * @return `expected` as `T` for type inspection.
201
- */
202
- unknown<T>(expected: IsUnknown<T>): T;
203
- /**
204
- * Check if type `T` is exactly `void`.
205
- *
206
- * @return `expected` as `T` for type inspection.
207
- */
208
- void<T>(expected: IsVoid<T>): T;
209
- /**
210
- * A quick way to inspect a type.
211
- *
212
- * The handler receives a `InspectedType` object.
213
- * It contains `value` which is typed to `T`,
214
- * and many other properties to inspect the behavior of `T`.
215
- *
216
- * The handler is not being call,
217
- * it is use to hold the type in value for inspection.
218
- *
219
- * 🧪 *testing*
220
- * 🦴 *utilities*
221
- *
222
- * @example
223
- * ```ts
224
- * testType.inspect<SomeType>(t => {
225
- * type T = typeof t.value // resolve and inspect the type `T`
226
- * t.extend_boolean // result of `T extends boolean`
227
- * })
228
- * ```
229
- *
230
- * After trying out the type, remove the line.
231
- */
232
- inspect<T>(handler: (t: InspectedType<T>) => unknown): T;
25
+ export declare namespace testType {
26
+ interface TestType {
27
+ /**
28
+ * Check if type `A` is equal to type `B` and `C`.
29
+ *
30
+ * @return `expected` as `A` for type inspection.
31
+ */
32
+ equal<A, B, C>(expected: IsEqual<A, B> & IsEqual<A, C>): A;
33
+ /**
34
+ * Check if type `A` is equal to type `B`.
35
+ *
36
+ * @return `expected` as `A` for type inspection.
37
+ */
38
+ equal<A, B>(expected: IsEqual<A, B>): A;
39
+ /**
40
+ * Check if `A` can assign to `B`.
41
+ *
42
+ * If `A` is a union,
43
+ * the check is distributive.
44
+ *
45
+ * Meaning the result can be `boolean`,
46
+ * meaning both `true` and `false` will pass.
47
+ *
48
+ * If you want to avoid the distributivity,
49
+ * use `testType.strictCanAssign()` instead.
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * testType.canAssign<123, number> // true
54
+ *
55
+ * testType.canAssign<number | string, number> // boolean
56
+ * ```
57
+ *
58
+ * @return `expected` as `A` for type inspection.
59
+ */
60
+ canAssign<A, B>(expected: CanAssign<A, B>): A;
61
+ /**
62
+ * Check if `A` can fully assign to `B`.
63
+ *
64
+ * This checks all branches in an union `A` are assignable to `B`.
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * testType.strictCanAssign<number | string, number | string> // true
69
+ *
70
+ * testType.strictCanAssign<number | string, number> // false
71
+ * ```
72
+ *
73
+ * @return `expected` as `A` for type inspection.
74
+ */
75
+ strictCanAssign<A, B>(expected: StrictCanAssign<A, B>): A;
76
+ /**
77
+ * Check if type `T` is exactly `any`.
78
+ *
79
+ * @return `expected` as `T` for type inspection.
80
+ */
81
+ any<T>(expected: IsAny<T>): T;
82
+ /**
83
+ * Check if type `T` is exactly `array`.
84
+ *
85
+ * @return `expected` as `T` for type inspection.
86
+ */
87
+ array<T>(expected: IsArray<T>): T;
88
+ /**
89
+ * Check if type `T` is exactly `bigint`.
90
+ *
91
+ * @return `expected` as `T` for type inspection.
92
+ */
93
+ strictBigint<T>(expected: IsStrictBigint<T>): T;
94
+ /**
95
+ * Check if type `T` is `bigint` or bigint literals.
96
+ *
97
+ * @return `expected` as `T` for type inspection.
98
+ */
99
+ bigint<T>(expected: IsBigint<T>): T;
100
+ /**
101
+ * Check if type `T` is exactly `boolean`.
102
+ *
103
+ * @return `expected` as `T` for type inspection.
104
+ */
105
+ strictBoolean<T>(expected: IsStrictBoolean<T>): T;
106
+ /**
107
+ * Check if type `T` is `boolean` and boolean literals.
108
+ *
109
+ * @return `expected` as `T` for type inspection.
110
+ */
111
+ boolean<T>(expected: IsBoolean<T>): T;
112
+ /**
113
+ * Check if type `T` is exactly `true`.
114
+ *
115
+ * @return `expected` as `T` for type inspection.
116
+ */
117
+ true<T>(expected: IsTrue<T>): T;
118
+ /**
119
+ * Check if type `T` is exactly `false`.
120
+ *
121
+ * @return `expected` as `T` for type inspection.
122
+ */
123
+ false<T>(expected: IsFalse<T>): T;
124
+ /**
125
+ * Check if type `T` is exactly `boolean`.
126
+ *
127
+ * @return `expected` as `T` for type inspection.
128
+ */
129
+ strictFunction<T>(expected: IsStrictFunction<T>): T;
130
+ /**
131
+ * Check if type `T` is `boolean` and boolean literals.
132
+ *
133
+ * @return `expected` as `T` for type inspection.
134
+ */
135
+ function<T>(expected: IsFunction<T>): T;
136
+ /**
137
+ * Check if type `T` is exactly `never`.
138
+ *
139
+ * @return `expected` as `T` for type inspection.
140
+ */
141
+ never<T>(expected: IsNever<T>): T;
142
+ /**
143
+ * Check if type `T` is exactly `null`.
144
+ *
145
+ * @return `expected` as `T` for type inspection.
146
+ */
147
+ null<T>(expected: IsNull<T>): T;
148
+ /**
149
+ * Check if type `T` is exactly `number`.
150
+ *
151
+ * @return `expected` as `T` for type inspection.
152
+ */
153
+ strictNumber<T>(expected: IsStrictNumber<T>): T;
154
+ /**
155
+ * Check if type `T` is `number` or number literals.
156
+ *
157
+ * @return `expected` as `T` for type inspection.
158
+ */
159
+ number<T>(expected: IsNumber<T>): T;
160
+ /**
161
+ * Check if type `T` is `object`.
162
+ *
163
+ * Note that `Function`, `Array`, and *tuple* are also `object`.
164
+ *
165
+ * @return `expected` as `T` for type inspection.
166
+ */
167
+ object<T>(expected: IsObject<T>): T;
168
+ /**
169
+ * Check if type `T` is exactly `string`.
170
+ *
171
+ * @return `expected` as `T` for type inspection.
172
+ */
173
+ strictString<T>(expected: IsStrictString<T>): T;
174
+ /**
175
+ * Check if type `T` is `string` or string literals.
176
+ *
177
+ * @return `expected` as `T` for type inspection.
178
+ */
179
+ string<T>(expected: IsString<T>): T;
180
+ /**
181
+ * Check if type `T` is a `symbol`.
182
+ *
183
+ * @return `expected` as `T` for type inspection.
184
+ */
185
+ symbol<T>(expected: IsSymbol<T>): T;
186
+ /**
187
+ * Check if type `T` is a *tuple*.
188
+ *
189
+ * @return `expected` as `T` for type inspection.
190
+ */
191
+ tuple<T>(expected: IsTuple<T>): T;
192
+ /**
193
+ * Check if type `T` is exactly `undefined`.
194
+ *
195
+ * @return `expected` as `T` for type inspection.
196
+ */
197
+ undefined<T>(expected: IsUndefined<T>): T;
198
+ /**
199
+ * Check if type `T` is exactly `unknown`.
200
+ *
201
+ * @return `expected` as `T` for type inspection.
202
+ */
203
+ unknown<T>(expected: IsUnknown<T>): T;
204
+ /**
205
+ * Check if type `T` is exactly `void`.
206
+ *
207
+ * @return `expected` as `T` for type inspection.
208
+ */
209
+ void<T>(expected: IsVoid<T>): T;
210
+ /**
211
+ * A quick way to inspect a type.
212
+ *
213
+ * The handler receives a `InspectedType` object.
214
+ * It contains `value` which is typed to `T`,
215
+ * and many other properties to inspect the behavior of `T`.
216
+ *
217
+ * The handler is not being call,
218
+ * it is use to hold the type in value for inspection.
219
+ *
220
+ * 🧪 *testing*
221
+ * 🦴 *utilities*
222
+ *
223
+ * @example
224
+ * ```ts
225
+ * testType.inspect<SomeType>(t => {
226
+ * type T = typeof t.value // resolve and inspect the type `T`
227
+ * t.extend_boolean // result of `T extends boolean`
228
+ * })
229
+ * ```
230
+ *
231
+ * After trying out the type, remove the line.
232
+ */
233
+ inspect<T>(handler: (t: InspectedType<T>) => unknown): T;
234
+ }
235
+ type InspectedType<T> = {
236
+ type: T;
237
+ extends<R>(): T extends R ? true : false;
238
+ extends_any: T extends any ? true : false;
239
+ extends_unknown: T extends unknown ? true : false;
240
+ extends_void: T extends void ? true : false;
241
+ extends_never: T extends never ? true : false;
242
+ extends_undefined: T extends undefined ? true : false;
243
+ extends_null: T extends null ? true : false;
244
+ extends_boolean: T extends boolean ? true : false;
245
+ extends_true: T extends true ? true : false;
246
+ extends_false: T extends false ? true : false;
247
+ extends_number: T extends number ? true : false;
248
+ extends_1: T extends 1 ? true : false;
249
+ extends_bigint: T extends bigint ? true : false;
250
+ extends_1n: T extends 1n ? true : false;
251
+ extends_string: T extends string ? true : false;
252
+ extends_a: T extends 'a' ? true : false;
253
+ extends_symbol: T extends symbol ? true : false;
254
+ extends_object: T extends object ? true : false;
255
+ extends_function: T extends Function ? true : false;
256
+ extends_array_unknown: T extends unknown[] ? true : false;
257
+ extends_tuple_empty: T extends [] ? true : false;
258
+ union<R>(): T | R;
259
+ union_any: T | any;
260
+ union_unknown: T | unknown;
261
+ union_void: T | void;
262
+ union_never: T | never;
263
+ union_undefined: T | undefined;
264
+ union_null: T | null;
265
+ union_boolean: T | boolean;
266
+ union_true: T | true;
267
+ union_false: T | false;
268
+ union_number: T | number;
269
+ union_1: T | 1;
270
+ union_bigint: T | bigint;
271
+ union_1n: T | 1n;
272
+ union_string: T | string;
273
+ union_a: T | 'a';
274
+ union_symbol: T | symbol;
275
+ union_object: T | object;
276
+ union_function: T | Function;
277
+ union_array_unknown: T | unknown[];
278
+ union_tuple_empty: T | [];
279
+ intersect<R>(): T & R;
280
+ intersect_any: T & any;
281
+ intersect_unknown: T & unknown;
282
+ intersect_void: T & void;
283
+ intersect_never: T & never;
284
+ intersect_undefined: T & undefined;
285
+ intersect_null: T & null;
286
+ intersect_boolean: T & boolean;
287
+ intersect_true: T & true;
288
+ intersect_false: T & false;
289
+ intersect_number: T & number;
290
+ intersect_1: T & 1;
291
+ intersect_bigint: T & bigint;
292
+ intersect_1n: T & 1n;
293
+ intersect_string: T & string;
294
+ intersect_a: T & 'a';
295
+ intersect_symbol: T & symbol;
296
+ intersect_object: T & object;
297
+ intersect_function: T & Function;
298
+ intersect_array_unknown: T & unknown[];
299
+ intersect_tuple_empty: T & [];
300
+ };
233
301
  }
234
302
  /**
235
303
  * Test utilities for types.
@@ -238,72 +306,5 @@ interface TestType {
238
306
  * The return value is the input `expected` parameter asserted as the first type parameter,
239
307
  * so that the type can be further inspected.
240
308
  */
241
- export declare const testType: TestType;
242
- export type InspectedType<T> = {
243
- type: T;
244
- extends<R>(): T extends R ? true : false;
245
- extends_any: T extends any ? true : false;
246
- extends_unknown: T extends unknown ? true : false;
247
- extends_void: T extends void ? true : false;
248
- extends_never: T extends never ? true : false;
249
- extends_undefined: T extends undefined ? true : false;
250
- extends_null: T extends null ? true : false;
251
- extends_boolean: T extends boolean ? true : false;
252
- extends_true: T extends true ? true : false;
253
- extends_false: T extends false ? true : false;
254
- extends_number: T extends number ? true : false;
255
- extends_1: T extends 1 ? true : false;
256
- extends_bigint: T extends bigint ? true : false;
257
- extends_1n: T extends 1n ? true : false;
258
- extends_string: T extends string ? true : false;
259
- extends_a: T extends 'a' ? true : false;
260
- extends_symbol: T extends symbol ? true : false;
261
- extends_object: T extends object ? true : false;
262
- extends_function: T extends Function ? true : false;
263
- extends_array_unknown: T extends unknown[] ? true : false;
264
- extends_tuple_empty: T extends [] ? true : false;
265
- union<R>(): T | R;
266
- union_any: T | any;
267
- union_unknown: T | unknown;
268
- union_void: T | void;
269
- union_never: T | never;
270
- union_undefined: T | undefined;
271
- union_null: T | null;
272
- union_boolean: T | boolean;
273
- union_true: T | true;
274
- union_false: T | false;
275
- union_number: T | number;
276
- union_1: T | 1;
277
- union_bigint: T | bigint;
278
- union_1n: T | 1n;
279
- union_string: T | string;
280
- union_a: T | 'a';
281
- union_symbol: T | symbol;
282
- union_object: T | object;
283
- union_function: T | Function;
284
- union_array_unknown: T | unknown[];
285
- union_tuple_empty: T | [];
286
- intersect<R>(): T & R;
287
- intersect_any: T & any;
288
- intersect_unknown: T & unknown;
289
- intersect_void: T & void;
290
- intersect_never: T & never;
291
- intersect_undefined: T & undefined;
292
- intersect_null: T & null;
293
- intersect_boolean: T & boolean;
294
- intersect_true: T & true;
295
- intersect_false: T & false;
296
- intersect_number: T & number;
297
- intersect_1: T & 1;
298
- intersect_bigint: T & bigint;
299
- intersect_1n: T & 1n;
300
- intersect_string: T & string;
301
- intersect_a: T & 'a';
302
- intersect_symbol: T & symbol;
303
- intersect_object: T & object;
304
- intersect_function: T & Function;
305
- intersect_array_unknown: T & unknown[];
306
- intersect_tuple_empty: T & [];
307
- };
308
- export {};
309
+ export declare const testType: testType.TestType;
309
310
  //# sourceMappingURL=test_type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test_type.d.ts","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test_type.d.ts","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test_type.js","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":";;;AA4OA;;;;;;GAMG;AACU,QAAA,QAAQ,GAAG,IAAI,KAAK,CAAC,EAAc,EAAE;IACjD,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS;QAC5B,OAAO,CAAC,QAAiB,EAAE,EAAE,CAAC,QAAQ,CAAA;IACvC,CAAC;CACD,CAAC,CAAA"}
1
+ {"version":3,"file":"test_type.js","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":";;;AAiTA;;;;;;GAMG;AACU,QAAA,QAAQ,GAAG,IAAI,KAAK,CAAC,EAAuB,EAAE;IAC1D,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS;QAC5B,OAAO,CAAC,QAAiB,EAAE,EAAE,CAAC,QAAQ,CAAA;IACvC,CAAC;CACD,CAAC,CAAA"}
@@ -1,25 +1,30 @@
1
- import type { NotNeverType } from '../never/never_type.js';
1
+ import type { CommonPropKeys as ArrayCommonPropKeys } from '../array/array_plus.common_prop_keys.js';
2
2
  import type { KeyTypes } from '../object/KeyTypes.js';
3
- import type { Tail } from './tail.js';
3
+ import type { CommonPropKeys as TupleCommonPropKeys } from './tuple_plus.common_prop_keys.js';
4
4
  /**
5
5
  * ⚗️ *transform*
6
+ * 🔢 *customization*
6
7
  *
7
- * Gets the common property keys of the elements in tuple `T`.
8
+ * Gets the common property keys of the elements in tuple or array `T`.
8
9
  *
10
+ * @example
9
11
  * ```ts
10
12
  * import { CommonPropKeys } from 'type-plus'
11
13
  *
12
14
  * type R = CommonPropKeys<[{ a: number }, { b: number }]> // never
13
15
  * type R = CommonPropKeys<[{ a: number, c: 1 }, { b: number, c: 2 }]> // 'c'
14
16
  * ```
17
+ *
18
+ * @typeParam Options['caseNever'] Return type when `T` is `never`.
19
+ * Default to `never`.
15
20
  */
16
- export type CommonPropKeys<T extends Record<KeyTypes, unknown>[], Cases extends {
17
- array?: unknown;
18
- no_common_keys?: unknown;
19
- } = {
20
- array: T extends Array<infer R extends Record<KeyTypes, unknown>> ? keyof R : never;
21
- no_common_keys: never;
22
- }> = number extends T['length'] ? Cases['array'] : (T['length'] extends 0 ? Cases['no_common_keys'] : (T['length'] extends 1 ? keyof T[0] : (T['length'] extends 2 ? (keyof T[0] & keyof T[1] extends infer R ? NotNeverType<R, R, Cases['no_common_keys']> : never) : (keyof T[0] & keyof T[1] & CommonPropKeys<Tail<Tail<T>>> extends infer R ? NotNeverType<R, R, Cases['no_common_keys']> : never))));
21
+ export type CommonPropKeys<T extends Record<KeyTypes, unknown>[], Options extends CommonPropKeys.Options = CommonPropKeys.DefaultOptions> = number extends T['length'] ? ArrayCommonPropKeys<T> : TupleCommonPropKeys<T, Options>;
22
+ export declare namespace CommonPropKeys {
23
+ interface Options extends TupleCommonPropKeys.Options {
24
+ }
25
+ interface DefaultOptions extends TupleCommonPropKeys.DefaultOptions {
26
+ }
27
+ }
23
28
  /**
24
29
  * Gets the common property keys of the elements in `A`.
25
30
  *