type-plus 7.2.1 → 7.3.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.
Files changed (59) hide show
  1. package/README.md +3 -0
  2. package/cjs/array/array.some.d.ts +1 -1
  3. package/cjs/merge.d.ts +55 -0
  4. package/cjs/merge.d.ts.map +1 -0
  5. package/cjs/merge.js +18 -0
  6. package/cjs/merge.js.map +1 -0
  7. package/cjs/mix_types/any_or_never_type.d.ts +18 -10
  8. package/cjs/mix_types/any_or_never_type.d.ts.map +1 -1
  9. package/cjs/object/AnyRecord.d.ts +2 -1
  10. package/cjs/object/AnyRecord.d.ts.map +1 -1
  11. package/cjs/object/index.d.ts +1 -0
  12. package/cjs/object/index.d.ts.map +1 -1
  13. package/cjs/object/index.js.map +1 -1
  14. package/cjs/object/left_join.d.ts +10 -38
  15. package/cjs/object/left_join.d.ts.map +1 -1
  16. package/cjs/object/left_join.js +0 -15
  17. package/cjs/object/left_join.js.map +1 -1
  18. package/cjs/object/optional_key.d.ts +35 -0
  19. package/cjs/object/optional_key.d.ts.map +1 -0
  20. package/cjs/object/optional_key.js +3 -0
  21. package/cjs/object/optional_key.js.map +1 -0
  22. package/cjs/testing/test_type.d.ts +36 -8
  23. package/cjs/testing/test_type.d.ts.map +1 -1
  24. package/cjs/testing/test_type.js.map +1 -1
  25. package/esm/array/array.some.d.ts +1 -1
  26. package/esm/merge.d.ts +55 -0
  27. package/esm/merge.d.ts.map +1 -0
  28. package/esm/merge.js +14 -0
  29. package/esm/merge.js.map +1 -0
  30. package/esm/mix_types/any_or_never_type.d.ts +18 -10
  31. package/esm/mix_types/any_or_never_type.d.ts.map +1 -1
  32. package/esm/object/AnyRecord.d.ts +2 -1
  33. package/esm/object/AnyRecord.d.ts.map +1 -1
  34. package/esm/object/index.d.ts +1 -0
  35. package/esm/object/index.d.ts.map +1 -1
  36. package/esm/object/index.js.map +1 -1
  37. package/esm/object/left_join.d.ts +10 -38
  38. package/esm/object/left_join.d.ts.map +1 -1
  39. package/esm/object/left_join.js +1 -13
  40. package/esm/object/left_join.js.map +1 -1
  41. package/esm/object/optional_key.d.ts +35 -0
  42. package/esm/object/optional_key.d.ts.map +1 -0
  43. package/esm/object/optional_key.js +2 -0
  44. package/esm/object/optional_key.js.map +1 -0
  45. package/esm/testing/test_type.d.ts +36 -8
  46. package/esm/testing/test_type.d.ts.map +1 -1
  47. package/esm/testing/test_type.js.map +1 -1
  48. package/package.json +4 -3
  49. package/ts/any/readme.md +20 -3
  50. package/ts/array/array.some.ts +1 -1
  51. package/ts/merge.ts +72 -0
  52. package/ts/mix_types/any_or_never_type.ts +18 -10
  53. package/ts/mix_types/readme.md +34 -0
  54. package/ts/object/AnyRecord.ts +3 -1
  55. package/ts/object/index.ts +1 -1
  56. package/ts/object/left_join.ts +15 -38
  57. package/ts/object/optional_key.ts +38 -0
  58. package/ts/object/readme.md +37 -0
  59. package/ts/testing/test_type.ts +37 -8
@@ -211,22 +211,27 @@ interface TestType {
211
211
  /**
212
212
  * A quick way to inspect a type.
213
213
  *
214
- * The handler is not being call.
214
+ * The handler receives a `InspectedType` object.
215
+ * It contains `value` which is typed to `T`,
216
+ * and many other properties to inspect the behavior of `T`.
215
217
  *
216
- * It just make it easy to inspect a specific type.
218
+ * The handler is not being call,
219
+ * it is use to hold the type in value for inspection.
220
+ *
221
+ * 🧪 *testing*
222
+ * 🦴 *utilities*
217
223
  *
218
224
  * @example
219
225
  * ```ts
220
- * testType.inspect<SomeType>(t => ...try out the `t` which is `SomeType` here...)
221
- *
222
- * // instead of
223
- * const r: SomeType = {} as any
224
- * ...try out the `r` which is `SomeType` here...
226
+ * testType.inspect<SomeType>(t => {
227
+ * type T = typeof t.value // resolve and inspect the type `T`
228
+ * t.extend_boolean // result of `T extends boolean`
229
+ * })
225
230
  * ```
226
231
  *
227
232
  * After trying out the type, remove the line.
228
233
  */
229
- inspect<T>(handler: (t: T) => unknown): (t: T) => unknown
234
+ inspect<T>(handler: (t: InspectedType<T>) => unknown): T
230
235
  }
231
236
 
232
237
  /**
@@ -241,3 +246,27 @@ export const testType = new Proxy({} as TestType, {
241
246
  return (expected: unknown) => expected
242
247
  }
243
248
  })
249
+
250
+ export type InspectedType<T> = {
251
+ value: T
252
+ extends_any: T extends any ? true : false
253
+ extends_unknown: T extends unknown ? true : false
254
+ extends_void: T extends void ? true : false
255
+ extends_never: T extends never ? true : false
256
+ extends_undefined: T extends undefined ? true : false
257
+ extends_null: T extends null ? true : false
258
+ extends_boolean: T extends boolean ? true : false
259
+ extends_true: T extends true ? true : false
260
+ extends_false: T extends false ? true : false
261
+ extends_number: T extends number ? true : false
262
+ extends_1: T extends 1 ? true : false
263
+ extends_bigint: T extends bigint ? true : false
264
+ extends_1n: T extends 1n ? true : false
265
+ extends_string: T extends string ? true : false
266
+ extends_a: T extends 'a' ? true : false
267
+ extends_symbol: T extends symbol ? true : false
268
+ extends_object: T extends object ? true : false
269
+ extends_function: T extends Function ? true : false
270
+ extends_array_unknown: T extends unknown[] ? true : false
271
+ extends_tuple_empty: T extends [] ? true : false
272
+ }