type-plus 6.5.0 → 6.7.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 (214) hide show
  1. package/README.md +27 -15
  2. package/cjs/any/any_or_never.d.ts +0 -2
  3. package/cjs/any/any_or_never.d.ts.map +1 -1
  4. package/cjs/any/any_type.d.ts +2 -6
  5. package/cjs/any/any_type.d.ts.map +1 -1
  6. package/cjs/array/array.d.ts +0 -4
  7. package/cjs/array/array.d.ts.map +1 -1
  8. package/cjs/array/array_index.d.ts +7 -10
  9. package/cjs/array/array_index.d.ts.map +1 -1
  10. package/cjs/array/array_type.d.ts +0 -8
  11. package/cjs/array/array_type.d.ts.map +1 -1
  12. package/cjs/bigint/bigint_type.d.ts +4 -12
  13. package/cjs/bigint/bigint_type.d.ts.map +1 -1
  14. package/cjs/bigint/strict_bigint_type.d.ts +4 -12
  15. package/cjs/bigint/strict_bigint_type.d.ts.map +1 -1
  16. package/cjs/boolean/boolean_type.d.ts +0 -8
  17. package/cjs/boolean/boolean_type.d.ts.map +1 -1
  18. package/cjs/boolean/false_type.d.ts +0 -8
  19. package/cjs/boolean/false_type.d.ts.map +1 -1
  20. package/cjs/boolean/strict_boolean_type.d.ts +0 -8
  21. package/cjs/boolean/strict_boolean_type.d.ts.map +1 -1
  22. package/cjs/boolean/true_type.d.ts +0 -8
  23. package/cjs/boolean/true_type.d.ts.map +1 -1
  24. package/cjs/equal/equal.d.ts +4 -5
  25. package/cjs/equal/equal.d.ts.map +1 -1
  26. package/cjs/function/function_type.d.ts +0 -8
  27. package/cjs/function/function_type.d.ts.map +1 -1
  28. package/cjs/function/strict_function_type.d.ts +0 -8
  29. package/cjs/function/strict_function_type.d.ts.map +1 -1
  30. package/cjs/index.d.ts +3 -0
  31. package/cjs/index.d.ts.map +1 -1
  32. package/cjs/index.js.map +1 -1
  33. package/cjs/never/never_type.d.ts +2 -10
  34. package/cjs/never/never_type.d.ts.map +1 -1
  35. package/cjs/null/null_type.d.ts +4 -12
  36. package/cjs/null/null_type.d.ts.map +1 -1
  37. package/cjs/number/integer.d.ts +1 -9
  38. package/cjs/number/integer.d.ts.map +1 -1
  39. package/cjs/number/negative.d.ts +0 -8
  40. package/cjs/number/negative.d.ts.map +1 -1
  41. package/cjs/number/number_type.d.ts +0 -8
  42. package/cjs/number/number_type.d.ts.map +1 -1
  43. package/cjs/number/numeric_type.d.ts +0 -8
  44. package/cjs/number/numeric_type.d.ts.map +1 -1
  45. package/cjs/number/positive.d.ts +1 -9
  46. package/cjs/number/positive.d.ts.map +1 -1
  47. package/cjs/number/strict_number_type.d.ts +4 -12
  48. package/cjs/number/strict_number_type.d.ts.map +1 -1
  49. package/cjs/object/object_type.d.ts +1 -9
  50. package/cjs/object/object_type.d.ts.map +1 -1
  51. package/cjs/string/strict_string_type.d.ts +14 -19
  52. package/cjs/string/strict_string_type.d.ts.map +1 -1
  53. package/cjs/string/string.d.ts +24 -0
  54. package/cjs/string/string.d.ts.map +1 -0
  55. package/cjs/string/string.js +3 -0
  56. package/cjs/string/string.js.map +1 -0
  57. package/cjs/string/string_plus.d.ts +27 -0
  58. package/cjs/string/string_plus.d.ts.map +1 -0
  59. package/cjs/string/string_plus.js +3 -0
  60. package/cjs/string/string_plus.js.map +1 -0
  61. package/cjs/string/string_type.d.ts +4 -12
  62. package/cjs/string/string_type.d.ts.map +1 -1
  63. package/cjs/symbol/symbol_type.d.ts +5 -15
  64. package/cjs/symbol/symbol_type.d.ts.map +1 -1
  65. package/cjs/testing/stub.d.ts +4 -2
  66. package/cjs/testing/stub.d.ts.map +1 -1
  67. package/cjs/testing/stub.js.map +1 -1
  68. package/cjs/tuple/tuple_type.d.ts +0 -8
  69. package/cjs/tuple/tuple_type.d.ts.map +1 -1
  70. package/cjs/type/failed.d.ts +2 -3
  71. package/cjs/type/failed.d.ts.map +1 -1
  72. package/cjs/type/failed.js +0 -1
  73. package/cjs/type/failed.js.map +1 -1
  74. package/cjs/type/no_infer.d.ts +24 -0
  75. package/cjs/type/no_infer.d.ts.map +1 -0
  76. package/cjs/type/no_infer.js +3 -0
  77. package/cjs/type/no_infer.js.map +1 -0
  78. package/cjs/undefined/undefined_type.d.ts +4 -12
  79. package/cjs/undefined/undefined_type.d.ts.map +1 -1
  80. package/cjs/unknown/unknown_type.d.ts +4 -12
  81. package/cjs/unknown/unknown_type.d.ts.map +1 -1
  82. package/cjs/void/void_type.d.ts +0 -8
  83. package/cjs/void/void_type.d.ts.map +1 -1
  84. package/esm/any/any_or_never.d.ts +0 -2
  85. package/esm/any/any_or_never.d.ts.map +1 -1
  86. package/esm/any/any_type.d.ts +2 -6
  87. package/esm/any/any_type.d.ts.map +1 -1
  88. package/esm/array/array.d.ts +0 -4
  89. package/esm/array/array.d.ts.map +1 -1
  90. package/esm/array/array_index.d.ts +7 -10
  91. package/esm/array/array_index.d.ts.map +1 -1
  92. package/esm/array/array_type.d.ts +0 -8
  93. package/esm/array/array_type.d.ts.map +1 -1
  94. package/esm/bigint/bigint_type.d.ts +4 -12
  95. package/esm/bigint/bigint_type.d.ts.map +1 -1
  96. package/esm/bigint/strict_bigint_type.d.ts +4 -12
  97. package/esm/bigint/strict_bigint_type.d.ts.map +1 -1
  98. package/esm/boolean/boolean_type.d.ts +0 -8
  99. package/esm/boolean/boolean_type.d.ts.map +1 -1
  100. package/esm/boolean/false_type.d.ts +0 -8
  101. package/esm/boolean/false_type.d.ts.map +1 -1
  102. package/esm/boolean/strict_boolean_type.d.ts +0 -8
  103. package/esm/boolean/strict_boolean_type.d.ts.map +1 -1
  104. package/esm/boolean/true_type.d.ts +0 -8
  105. package/esm/boolean/true_type.d.ts.map +1 -1
  106. package/esm/equal/equal.d.ts +4 -5
  107. package/esm/equal/equal.d.ts.map +1 -1
  108. package/esm/function/function_type.d.ts +0 -8
  109. package/esm/function/function_type.d.ts.map +1 -1
  110. package/esm/function/strict_function_type.d.ts +0 -8
  111. package/esm/function/strict_function_type.d.ts.map +1 -1
  112. package/esm/index.d.ts +3 -0
  113. package/esm/index.d.ts.map +1 -1
  114. package/esm/index.js.map +1 -1
  115. package/esm/never/never_type.d.ts +2 -10
  116. package/esm/never/never_type.d.ts.map +1 -1
  117. package/esm/null/null_type.d.ts +4 -12
  118. package/esm/null/null_type.d.ts.map +1 -1
  119. package/esm/number/integer.d.ts +1 -9
  120. package/esm/number/integer.d.ts.map +1 -1
  121. package/esm/number/negative.d.ts +0 -8
  122. package/esm/number/negative.d.ts.map +1 -1
  123. package/esm/number/number_type.d.ts +0 -8
  124. package/esm/number/number_type.d.ts.map +1 -1
  125. package/esm/number/numeric_type.d.ts +0 -8
  126. package/esm/number/numeric_type.d.ts.map +1 -1
  127. package/esm/number/positive.d.ts +1 -9
  128. package/esm/number/positive.d.ts.map +1 -1
  129. package/esm/number/strict_number_type.d.ts +4 -12
  130. package/esm/number/strict_number_type.d.ts.map +1 -1
  131. package/esm/object/object_type.d.ts +1 -9
  132. package/esm/object/object_type.d.ts.map +1 -1
  133. package/esm/string/strict_string_type.d.ts +14 -19
  134. package/esm/string/strict_string_type.d.ts.map +1 -1
  135. package/esm/string/string.d.ts +24 -0
  136. package/esm/string/string.d.ts.map +1 -0
  137. package/esm/string/string.js +2 -0
  138. package/esm/string/string.js.map +1 -0
  139. package/esm/string/string_plus.d.ts +27 -0
  140. package/esm/string/string_plus.d.ts.map +1 -0
  141. package/esm/string/string_plus.js +2 -0
  142. package/esm/string/string_plus.js.map +1 -0
  143. package/esm/string/string_type.d.ts +4 -12
  144. package/esm/string/string_type.d.ts.map +1 -1
  145. package/esm/symbol/symbol_type.d.ts +5 -15
  146. package/esm/symbol/symbol_type.d.ts.map +1 -1
  147. package/esm/testing/stub.d.ts +4 -2
  148. package/esm/testing/stub.d.ts.map +1 -1
  149. package/esm/testing/stub.js.map +1 -1
  150. package/esm/tuple/tuple_type.d.ts +0 -8
  151. package/esm/tuple/tuple_type.d.ts.map +1 -1
  152. package/esm/type/failed.d.ts +2 -3
  153. package/esm/type/failed.d.ts.map +1 -1
  154. package/esm/type/failed.js +1 -1
  155. package/esm/type/failed.js.map +1 -1
  156. package/esm/type/no_infer.d.ts +24 -0
  157. package/esm/type/no_infer.d.ts.map +1 -0
  158. package/esm/type/no_infer.js +2 -0
  159. package/esm/type/no_infer.js.map +1 -0
  160. package/esm/undefined/undefined_type.d.ts +4 -12
  161. package/esm/undefined/undefined_type.d.ts.map +1 -1
  162. package/esm/unknown/unknown_type.d.ts +4 -12
  163. package/esm/unknown/unknown_type.d.ts.map +1 -1
  164. package/esm/void/void_type.d.ts +0 -8
  165. package/esm/void/void_type.d.ts.map +1 -1
  166. package/package.json +3 -3
  167. package/ts/any/any_or_never.ts +0 -2
  168. package/ts/any/any_type.ts +2 -6
  169. package/ts/array/array.ts +0 -4
  170. package/ts/array/array_index.ts +7 -10
  171. package/ts/array/array_type.ts +0 -8
  172. package/ts/bigint/bigint_type.ts +4 -12
  173. package/ts/bigint/strict_bigint_type.ts +4 -12
  174. package/ts/boolean/boolean_type.ts +0 -8
  175. package/ts/boolean/false_type.ts +0 -8
  176. package/ts/boolean/strict_boolean_type.ts +0 -8
  177. package/ts/boolean/true_type.ts +0 -8
  178. package/ts/equal/equal.ts +9 -5
  179. package/ts/equal/readme.md +3 -0
  180. package/ts/function/function_type.ts +0 -8
  181. package/ts/function/strict_function_type.ts +0 -8
  182. package/ts/index.ts +3 -0
  183. package/ts/never/never_type.ts +2 -10
  184. package/ts/null/null_type.ts +4 -12
  185. package/ts/number/integer.ts +1 -9
  186. package/ts/number/negative.ts +0 -8
  187. package/ts/number/number_type.ts +0 -8
  188. package/ts/number/numeric_type.ts +0 -8
  189. package/ts/number/positive.ts +1 -9
  190. package/ts/number/strict_number_type.ts +4 -12
  191. package/ts/object/object_type.ts +1 -9
  192. package/ts/string/readme.md +5 -0
  193. package/ts/string/strict_string_type.ts +15 -19
  194. package/ts/string/string.ts +36 -0
  195. package/ts/string/string_plus.ts +33 -0
  196. package/ts/string/string_type.ts +4 -12
  197. package/ts/symbol/symbol_type.ts +5 -17
  198. package/ts/testing/stub.ts +6 -3
  199. package/ts/tuple/tuple_type.ts +0 -8
  200. package/ts/type/failed.ts +1 -3
  201. package/ts/type/no_infer.ts +24 -0
  202. package/ts/type/readme.md +36 -0
  203. package/ts/undefined/undefined_type.ts +4 -12
  204. package/ts/unknown/unknown_type.ts +4 -12
  205. package/ts/void/void_type.ts +0 -8
  206. package/cjs/type/constants.d.ts +0 -5
  207. package/cjs/type/constants.d.ts.map +0 -1
  208. package/cjs/type/constants.js +0 -8
  209. package/cjs/type/constants.js.map +0 -1
  210. package/esm/type/constants.d.ts +0 -5
  211. package/esm/type/constants.d.ts.map +0 -1
  212. package/esm/type/constants.js +0 -5
  213. package/esm/type/constants.js.map +0 -1
  214. package/ts/type/constants.ts +0 -4
@@ -3,9 +3,7 @@ import type { IsAny } from '../any/any_type.js'
3
3
  /**
4
4
  * Check if the type `T` is exactly `null`.
5
5
  *
6
- * ```
7
- * import type { NullType } from 'type-plus'
8
- *
6
+ * ```ts
9
7
  * type R = NullType<null> // null
10
8
  *
11
9
  * type R = NullType<never> // never
@@ -18,9 +16,7 @@ export type NullType<T, Then = T, Else = never> = IsAny<T, Else, [T, null] exten
18
16
  /**
19
17
  * Is the type `T` exactly `null`.
20
18
  *
21
- * ```
22
- * import type { IsNull } from 'type-plus'
23
- *
19
+ * ```ts
24
20
  * type R = IsNull<null> // true
25
21
  *
26
22
  * type R = IsNull<never> // false
@@ -33,9 +29,7 @@ export type IsNull<T, Then = true, Else = false> = NullType<T, Then, Else>
33
29
  /**
34
30
  * Check if the type `T` is not exactly `null`.
35
31
  *
36
- * ```
37
- * import type { NotNullType } from 'type-plus'
38
- *
32
+ * ```ts
39
33
  * type R = NotNullType<null> // never
40
34
  *
41
35
  * type R = NotNullType<never> // never
@@ -48,9 +42,7 @@ export type NotNullType<T, Then = T, Else = never> = NullType<T, Else, Then>
48
42
  /**
49
43
  * Is the type `T` not exactly `null`.
50
44
  *
51
- * ```
52
- * import type { IsNotNull } from 'type-plus'
53
- *
45
+ * ```ts
54
46
  * type R = IsNotNull<null> // false
55
47
  *
56
48
  * type R = IsNotNull<never> // true
@@ -5,8 +5,6 @@ import type { Numeric } from './numeric_type.js'
5
5
  * Check if T is an integer, including bigint.
6
6
  *
7
7
  * ```ts
8
- * import type { Integer } from 'type-plus'
9
- *
10
8
  * type R = Integer<0> // 0
11
9
  * type R = Integer<1n> // 1n
12
10
  *
@@ -24,8 +22,6 @@ export type Integer<T, Then = T, Else = never> = IsAnyOrNever<
24
22
  * Is T an integer, including bigint.
25
23
  *
26
24
  * ```ts
27
- * import type { IsInteger } from 'type-plus'
28
- *
29
25
  * type R = IsInteger<0> // true
30
26
  * type R = IsInteger<1n> // true
31
27
  *
@@ -39,8 +35,6 @@ export type IsInteger<T, Then = true, Else = false> = Integer<T, Then, Else>
39
35
  * Check if T is not an integer, including bigint.
40
36
  *
41
37
  * ```ts
42
- * import type { NotInteger } from 'type-plus'
43
- *
44
38
  * type R = NotInteger<1.1> // 1.1
45
39
  * type R = NotInteger<number> // number as it contains non-integer
46
40
  *
@@ -68,9 +62,7 @@ export type IsNotInteger<T, Then = true, Else = false> = NotInteger<T, Else, The
68
62
  /**
69
63
  * Check if T is an integer, including bigint.
70
64
  *
71
- * ```
72
- * import type { IsWhole } from 'type-plus'
73
- *
65
+ * ```ts
74
66
  * type R = IsWhole<0> // 0
75
67
  * type R = IsWhole<1n> // 1n
76
68
  *
@@ -6,8 +6,6 @@ import type { Zero } from './numeric_type.js'
6
6
  * Check if 'T' is a negative numeric type.
7
7
  *
8
8
  * ```ts
9
- * import type { Negative } from 'type-plus'
10
- *
11
9
  * type R = Negative<-1> // -1
12
10
  * type R = Negative<-1n> // -1n
13
11
  *
@@ -42,8 +40,6 @@ export type Negative<T, Then = T, Else = never> = IsAny<
42
40
  * Is 'T' a negative numeric type.
43
41
  *
44
42
  * ```ts
45
- * import type { IsNegative } from 'type-plus'
46
- *
47
43
  * type R = IsNegative<-1> // true
48
44
  * type R = IsNegative<-1n> // true
49
45
  *
@@ -60,8 +56,6 @@ export type IsNegative<T, Then = true, Else = false> = Negative<T, Then, Else>
60
56
  * Check if 'T' is not a negative numeric type.
61
57
  *
62
58
  * ```ts
63
- * import type { NotNegative } from 'type-plus'
64
- *
65
59
  * type R = NotNegative<-1> // never
66
60
  * type R = NotNegative<-1n> // never
67
61
  *
@@ -94,8 +88,6 @@ export type NotNegative<T, Then = T, Else = never> = IsAny<
94
88
  * Is 'T' not a negative numeric type.
95
89
  *
96
90
  * ```ts
97
- * import type { IsNotNegative } from 'type-plus'
98
- *
99
91
  * type R = IsNotNegative<-1> // false
100
92
  * type R = IsNotNegative<-1n> // false
101
93
  *
@@ -4,8 +4,6 @@ import type { IsAnyOrNever } from '../any/any_or_never.js'
4
4
  * Check if the type `T` is `number`.
5
5
  *
6
6
  * ```ts
7
- * import type { NumberType } from 'type-plus'
8
- *
9
7
  * type R = NumberType<number> // true
10
8
  * type R = NumberType<1> // true
11
9
  *
@@ -19,8 +17,6 @@ export type NumberType<T, Then = T, Else = never> = IsAnyOrNever<T, Else, [T] ex
19
17
  * Is the type `T` is `number`.
20
18
  *
21
19
  * ```ts
22
- * import type { IsNumber } from 'type-plus'
23
- *
24
20
  * type R = IsNumber<number> // true
25
21
  * type R = IsNumber<1> // true
26
22
  *
@@ -34,8 +30,6 @@ export type IsNumber<T, Then = true, Else = false> = NumberType<T, Then, Else>
34
30
  * Check if the type `T` is not `number`.
35
31
  *
36
32
  * ```ts
37
- * import type { NotNumberType } from 'type-plus'
38
- *
39
33
  * type R = NotNumberType<number> // false
40
34
  * type R = NotNumberType<1> // false
41
35
  *
@@ -49,8 +43,6 @@ export type NotNumberType<T, Then = T, Else = never> = NumberType<T, Else, Then>
49
43
  * Is the type `T` not `number`.
50
44
  *
51
45
  * ```ts
52
- * import type { IsNotNumber } from 'type-plus'
53
- *
54
46
  * type R = IsNotNumber<number> // false
55
47
  * type R = IsNotNumber<1> // false
56
48
  *
@@ -15,8 +15,6 @@ export type Zero = 0 | 0n
15
15
  * Meaning it is either a `number` or a `bigint`.
16
16
  *
17
17
  * ```ts
18
- * import type { NumericType } from 'type-plus'
19
- *
20
18
  * type R = NumericType<1> // 1
21
19
  * type R = NumericType<1.1> // 1.1
22
20
  *
@@ -30,8 +28,6 @@ export type NumericType<T, Then = T, Else = never> = IsAnyOrNever<T, Else, [T] e
30
28
  * Is `T` numeric.
31
29
  *
32
30
  * ```ts
33
- * import type { IsNumeric } from 'type-plus'
34
- *
35
31
  * type R = IsNumeric<1> // true
36
32
  * type R = IsNumeric<1.1> // true
37
33
  *
@@ -45,8 +41,6 @@ export type IsNumeric<T, Then = true, Else = false> = NumericType<T, Then, Else>
45
41
  * Check if `T` is not numeric.
46
42
  *
47
43
  * ```ts
48
- * import type { NotNumericType } from 'type-plus'
49
- *
50
44
  * type R = NotNumericType<1> // never
51
45
  * type R = NotNumericType<1.1> // never
52
46
  *
@@ -60,8 +54,6 @@ export type NotNumericType<T, Then = T, Else = never> = NumericType<T, Else, The
60
54
  * Is `T` not numeric.
61
55
  *
62
56
  * ```ts
63
- * import type { IsNotNumeric } from 'type-plus'
64
- *
65
57
  * type R = IsNotNumeric<1> // false
66
58
  * type R = IsNotNumeric<1.1> // false
67
59
  *
@@ -5,8 +5,6 @@ import { IsNever } from '../index.js'
5
5
  * Check if `T` is a positive numeric type.
6
6
  *
7
7
  * ```ts
8
- * import type { Positive } from 'type-plus'
9
- *
10
8
  * type R = Positive<1> // 1
11
9
  * type R = Positive<0> // 0
12
10
  * type R = Positive<1n> // 1n
@@ -24,15 +22,13 @@ export type Positive<T, Then = T, Else = never> = IsAny<
24
22
  * Is `T` a positive numeric type.
25
23
  *
26
24
  * ```ts
27
- * import type { IsPositive } from 'type-plus'
28
- *
29
25
  * type R = IsPositive<1> // true
30
26
  * type R = IsPositive<0> // true
31
27
  * type R = IsPositive<1n> // true
32
28
  *
33
29
  * type R = IsPositive<number> // boolean
34
30
  * type R = IsPositive<bigint> // boolean
35
- * type R = IsPosistive<any> // boolean
31
+ * type R = IsPositive<any> // boolean
36
32
  *
37
33
  * type R = IsPositive<-1> // false
38
34
  * ```
@@ -43,8 +39,6 @@ export type IsPositive<T, Then = true, Else = false> = Positive<T, Then, Else>
43
39
  * Check if `T` is not a positive numeric type.
44
40
  *
45
41
  * ```ts
46
- * import type { NonPositive } from 'type-plus'
47
- *
48
42
  * type R = NonPositive<-1> // -1
49
43
  *
50
44
  * type R = NonPositive<0> // never
@@ -57,8 +51,6 @@ export type NonPositive<T, Then = T, Else = never> = Positive<T, Else, Then>
57
51
  * Is `T` not a positive numeric type.
58
52
  *
59
53
  * ```ts
60
- * import type { IsNotPositive } from 'type-plus'
61
- *
62
54
  * type R = IsNotPositive<-1> // true
63
55
  *
64
56
  * type R = IsNotPositive<0> // false
@@ -4,8 +4,6 @@ import type { IsAny } from '../any/any_type.js'
4
4
  * Check if the type `T` is exactly the type `number` and not numeric literals.
5
5
  *
6
6
  * ```ts
7
- * import type { StrictNumberType } from 'type-plus'
8
- *
9
7
  * type R = StrictNumberType<number> // true
10
8
  * type R = StrictNumberType<1> // false
11
9
  *
@@ -23,8 +21,6 @@ export type StrictNumberType<T, Then = T, Else = never> = IsAny<
23
21
  * Is the type `T` exactly the type `number` and not numeric literals.
24
22
  *
25
23
  * ```ts
26
- * import type { IsStrictNumber } from 'type-plus'
27
- *
28
24
  * type R = IsStrictNumber<number> // true
29
25
  * type R = IsStrictNumber<1> // false
30
26
  *
@@ -38,13 +34,11 @@ export type IsStrictNumber<T, Then = true, Else = false> = StrictNumberType<T, T
38
34
  * Check if the type `T` is not the type `number` or numeric literals.
39
35
  *
40
36
  * ```ts
41
- * import type { NotStictNumberType } from 'type-plus'
37
+ * type R = NotStrictNumberType<number> // false
38
+ * type R = NotStrictNumberType<1> // true
42
39
  *
43
- * type R = NotStictNumberType<number> // false
44
- * type R = NotStictNumberType<1> // true
45
- *
46
- * type R = NotStictNumberType<never> // true
47
- * type R = NotStictNumberType<unknown> // true
40
+ * type R = NotStrictNumberType<never> // true
41
+ * type R = NotStrictNumberType<unknown> // true
48
42
  * ```
49
43
  */
50
44
  export type NotStrictNumberType<T, Then = T, Else = never> = StrictNumberType<T, Else, Then>
@@ -53,8 +47,6 @@ export type NotStrictNumberType<T, Then = T, Else = never> = StrictNumberType<T,
53
47
  * Is the type `T` not the type `number` or numeric literals.
54
48
  *
55
49
  * ```ts
56
- * import type { IsNotStrictNumber } from 'type-plus'
57
- *
58
50
  * type R = IsNotStrictNumber<number> // false
59
51
  * type R = IsNotStrictNumber<1> // true
60
52
  *
@@ -1,11 +1,9 @@
1
- import { IsAnyOrNever } from '../any/any_or_never.js'
1
+ import type { IsAnyOrNever } from '../any/any_or_never.js'
2
2
 
3
3
  /**
4
4
  * Check if `T` is an `object`.
5
5
  *
6
6
  * ```ts
7
- * import { type ObjectType } from 'type-plus'
8
- *
9
7
  * type R = ObjectType<{}> // {}
10
8
  * type R = ObjectType<{ a: 1 }> // { a: 1 }
11
9
  * type R = ObjectType<Function> // Function
@@ -21,8 +19,6 @@ export type ObjectType<T, Then = T, Else = never> = IsAnyOrNever<T, Else, [T] ex
21
19
  * Note that `Function` is also an `object`.
22
20
  *
23
21
  * ```ts
24
- * import { type IsObject } from 'type-plus'
25
- *
26
22
  * type R = IsObject<{}> // true
27
23
  * type R = IsObject<{ a: 1 }> // true
28
24
  * type R = IsObject<Function> // true
@@ -36,8 +32,6 @@ export type IsObject<T, Then = true, Else = false> = ObjectType<T, Then, Else>
36
32
  * Check if `T` is not an `object`.
37
33
  *
38
34
  * ```ts
39
- * import { type NotObjectType } from 'type-plus'
40
- *
41
35
  * type R = NotObjectType<{}> // never
42
36
  * type R = NotObjectType<{ a: 1 }> // never
43
37
  * type R = NotObjectType<Function> // never
@@ -53,8 +47,6 @@ export type NotObjectType<T, Then = T, Else = never> = ObjectType<T, Else, Then>
53
47
  * Note that `Function` is also an `object`.
54
48
  *
55
49
  * ```ts
56
- * import { type IsNotObject } from 'type-plus'
57
- *
58
50
  * type R = IsNotObject<{}> // false
59
51
  * type R = IsNotObject<{ a: 1 }> // false
60
52
  * type R = IsNotObject<Function> // false
@@ -36,6 +36,11 @@ type R = StrictStringType<1> // never
36
36
  - [`NotStrictStringType<T, Then = T, Else = never>`](strict_string_type.ts#L52): check if `T` is not exactly `string`.
37
37
  - [`IsNotStrictString<T, Then = true, Else = false>`](strict_string_type.ts#L69): is `T` not exactly `string`.
38
38
 
39
+ ## String Utilities
40
+
41
+ - [`StringIncludes<Subject, Search, Then = true, Else = false>`](./string.ts): check if `Subject` includes `Search`.
42
+ - [`StringSplit<Subject, Separater>`](./string.ts): split `Subject` by `Separater`.
43
+
39
44
  ## References
40
45
 
41
46
  - [Handbook]
@@ -3,26 +3,26 @@ import type { IsAny } from '../any/any_type.js'
3
3
  /**
4
4
  * Check if the type `T` is exactly `string`.
5
5
  *
6
- * ```
7
- * import type { StrictStringType } from 'type-plus'
8
- *
6
+ * ```ts
9
7
  * type R = StrictStringType<string> // string
10
- *
11
- * type R = StrictStringType<''> // never
12
- * type R = StrictStringType<'1'> // never
13
- * type R = StrictStringType<string | boolean> // never
14
- * type R = StrictStringType<never> // never
15
- * type R = StrictStringType<unknown> // never
8
+ *
9
+ * type R = StrictStringType<''> // never
10
+ * type R = StrictStringType<'1'> // never
11
+ * type R = StrictStringType<string | boolean> // never
12
+ * type R = StrictStringType<never> // never
13
+ * type R = StrictStringType<unknown> // never
16
14
  * ```
17
15
  */
18
- export type StrictStringType<T, Then = T, Else = never> = IsAny<T, Else, [T, string] extends [string, T] ? Then : Else>
16
+ export type StrictStringType<T, Then = T, Else = never> = IsAny<
17
+ T,
18
+ Else,
19
+ [T, string] extends [string, T] ? Then : Else
20
+ >
19
21
 
20
22
  /**
21
23
  * Is the type `T` exactly `string`.
22
24
  *
23
- * ```
24
- * import type { IsStrictString } from 'type-plus'
25
- *
25
+ * ```ts
26
26
  * type R = IsStrictString<string> // true
27
27
  *
28
28
  * type R = IsStrictString<''> // false
@@ -37,9 +37,7 @@ export type IsStrictString<T, Then = true, Else = false> = StrictStringType<T, T
37
37
  /**
38
38
  * Check if the type `T` is not exactly `string`.
39
39
  *
40
- * ```
41
- * import type { NotStrictStringType } from 'type-plus'
42
- *
40
+ * ```ts
43
41
  * type R = NotStrictStringType<string> // never
44
42
  *
45
43
  * type R = NotStrictStringType<''> // ''
@@ -54,9 +52,7 @@ export type NotStrictStringType<T, Then = T, Else = never> = StrictStringType<T,
54
52
  /**
55
53
  * Is the type `T` not exactly `string`.
56
54
  *
57
- * ```
58
- * import type { IsNotStrictString } from 'type-plus'
59
- *
55
+ * ```ts
60
56
  * type R = IsNotStrictString<string> // false
61
57
  *
62
58
  * type R = IsNotStrictString<''> // true
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Check if `Subject` includes `Search`.
3
+ * If either of them is not a string, returns `Else`.
4
+ *
5
+ * ```ts
6
+ * type R = StringIncludes<'abc', 'a'> // true
7
+ *
8
+ * type R = StringIncludes<'abc', 'd'> // false
9
+ * ```
10
+ */
11
+ export type StringIncludes<
12
+ Subject extends string,
13
+ Search extends string,
14
+ Then = true,
15
+ Else = false
16
+ > = Subject extends `${infer _}${Search}${infer _}` ? Then : Else
17
+
18
+ /**
19
+ * Split a string into substrings using the specified separator,
20
+ * and return them as an array.
21
+ *
22
+ * ```ts
23
+ * type R = StringSplit<'abc', ''> // ['a', 'b', 'c']
24
+ * type R = StringSplit<'abc', 'a'> // ['', 'bc']
25
+ * type R = StringSplit<'abc', 'b'> // ['a', 'c']
26
+ * type R = StringSplit<'abc', 'c'> // ['ab', '']
27
+ * ```
28
+ */
29
+ export type StringSplit<
30
+ Subject extends string,
31
+ Seperator extends string
32
+ > = Subject extends `${infer A}${Seperator}${infer B}`
33
+ ? [A, ...StringSplit<B, Seperator>]
34
+ : Seperator extends ''
35
+ ? []
36
+ : [Subject]
@@ -0,0 +1,33 @@
1
+ import type { StringIncludes, StringSplit } from './string.js'
2
+
3
+ export namespace StringPlus {
4
+ /**
5
+ * Check if `Subject` includes `Search`.
6
+ * If either of them is not a string, returns `Else`.
7
+ *
8
+ * ```ts
9
+ * type R = StringPlus.Includes<'abc', 'a'> // true
10
+ *
11
+ * type R = StringPlus.Includes<'abc', 'd'> // false
12
+ * ```
13
+ */
14
+ export type Includes<
15
+ Subject extends string,
16
+ Search extends string,
17
+ Then = true,
18
+ Else = false
19
+ > = StringIncludes<Subject, Search, Then, Else>
20
+
21
+ /**
22
+ * Split a string into substrings using the specified separator,
23
+ * and return them as an array.
24
+ *
25
+ * ```ts
26
+ * type R = StringPlus.Split<'abc', ''> // ['a', 'b', 'c']
27
+ * type R = StringPlus.Split<'abc', 'a'> // ['', 'bc']
28
+ * type R = StringPlus.Split<'abc', 'b'> // ['a', 'c']
29
+ * type R = StringPlus.Split<'abc', 'c'> // ['ab', '']
30
+ * ```
31
+ */
32
+ export type Split<Subject extends string, Seperator extends string> = StringSplit<Subject, Seperator>
33
+ }
@@ -3,9 +3,7 @@ import type { IsAnyOrNever } from '../any/any_or_never.js'
3
3
  /**
4
4
  * Check if the type `T` is `string` or string literals.
5
5
  *
6
- * ```
7
- * import type { StringType } from 'type-plus'
8
- *
6
+ * ```ts
9
7
  * type R = StringType<string> // string
10
8
  * type R = StringType<''> // ''
11
9
  * type R = StringType<'1'> // '1'
@@ -20,9 +18,7 @@ export type StringType<T, Then = T, Else = never> = IsAnyOrNever<T, Else, [T] ex
20
18
  /**
21
19
  * Is the type `T` `string` or string literals.
22
20
  *
23
- * ```
24
- * import type { IsString } from 'type-plus'
25
- *
21
+ * ```ts
26
22
  * type R = IsString<string> // true
27
23
  * type R = IsString<''> // true
28
24
  * type R = IsString<'a'> // true
@@ -37,9 +33,7 @@ export type IsString<T, Then = true, Else = false> = StringType<T, Then, Else>
37
33
  /**
38
34
  * Check if the type `T` is not `string` nor string literals.
39
35
  *
40
- * ```
41
- * import type { NotStringType } from 'type-plus'
42
- *
36
+ * ```ts
43
37
  * type R = NotStringType<string> // never
44
38
  * type R = NotStringType<''> // ''
45
39
  * type R = NotStringType<'a'> // 'a'
@@ -54,9 +48,7 @@ export type NotStringType<T, Then = T, Else = never> = StringType<T, Else, Then>
54
48
  /**
55
49
  * Is the type `T` not `string` nor string literals.
56
50
  *
57
- * ```
58
- * import type { IsNotString } from 'type-plus'
59
- *
51
+ * ```ts
60
52
  * type R = IsNotString<string> // false
61
53
  * type R = IsNotString<''> // false
62
54
  * type R = IsNotString<'a'> // false
@@ -3,9 +3,7 @@ import type { IsAnyOrNever } from '../any/any_or_never.js'
3
3
  /**
4
4
  * Check if the type `T` is exactly `symbol`.
5
5
  *
6
- * ```
7
- * import type { SymbolType } from 'type-plus'
8
- *
6
+ * ```ts
9
7
  * type R = SymbolType<symbol> // symbol
10
8
  *
11
9
  * type R = SymbolType<never> // never
@@ -13,18 +11,12 @@ import type { IsAnyOrNever } from '../any/any_or_never.js'
13
11
  * type R = SymbolType<symbol | boolean> // never
14
12
  * ```
15
13
  */
16
- export type SymbolType<T, Then = T, Else = never> = IsAnyOrNever<
17
- T,
18
- Else,
19
- [T] extends [symbol] ? Then : Else
20
- >
14
+ export type SymbolType<T, Then = T, Else = never> = IsAnyOrNever<T, Else, [T] extends [symbol] ? Then : Else>
21
15
 
22
16
  /**
23
17
  * Is the type `T` exactly `symbol`.
24
18
  *
25
- * ```
26
- * import type { IsSymbol } from 'type-plus'
27
- *
19
+ * ```ts
28
20
  * type R = IsSymbol<symbol> // true
29
21
  *
30
22
  * type R = IsSymbol<never> // false
@@ -37,9 +29,7 @@ export type IsSymbol<T, Then = true, Else = false> = SymbolType<T, Then, Else>
37
29
  /**
38
30
  * Check if the type `T` is not `symbol`.
39
31
  *
40
- * ```
41
- * import type { NotSymbolType } from 'type-plus'
42
- *
32
+ * ```ts
43
33
  * type R = NotSymbolType<symbol> // never
44
34
  *
45
35
  * type R = NotSymbolType<never> // never
@@ -52,9 +42,7 @@ export type NotSymbolType<T, Then = T, Else = never> = SymbolType<T, Else, Then>
52
42
  /**
53
43
  * Is the type `T` not `symbol`.
54
44
  *
55
- * ```
56
- * import type { IsNotSymbol } from 'type-plus'
57
- *
45
+ * ```ts
58
46
  * type R = IsNotSymbol<symbol> // false
59
47
  *
60
48
  * type R = IsNotSymbol<never> // true
@@ -1,12 +1,15 @@
1
1
  import { requiredDeep } from 'unpartial'
2
2
  import type { AnyFunction } from '../function/any_function.js'
3
3
  import type { RecursivePartial } from '../object/RecursivePartial.js'
4
+ import type { NoInfer } from '../type/no_infer.js'
4
5
 
5
6
  export namespace stub {
6
- export type Param<T> = T extends AnyFunction ? T : RecursivePartial<T>
7
+ export type Param<T> = T extends AnyFunction ? T : RecursivePartial<NoInfer<T>>
7
8
  }
8
9
 
9
- export function stub<T>(stub?: stub.Param<T>) {
10
+ export function stub<T extends AnyFunction>(stub: T): T
11
+ export function stub<T>(stub: RecursivePartial<NoInfer<T>>): T
12
+ export function stub<T>(stub: unknown): T {
10
13
  return stub as T
11
14
  }
12
15
 
@@ -18,7 +21,7 @@ function build<T>(init: RecursivePartial<T> | (() => RecursivePartial<T>)): (stu
18
21
  function build<T>(init?: RecursivePartial<T> | (() => RecursivePartial<T>)) {
19
22
  return function (value?: stub.Param<T>) {
20
23
  const initValue = typeof init === 'function' ? init() : init
21
- return initValue ? stub<T>(requiredDeep(initValue, value) as any) : stub<T>(value)
24
+ return initValue ? stub(requiredDeep(initValue, value) as any) : stub(value as any)
22
25
  }
23
26
  }
24
27
 
@@ -4,8 +4,6 @@ import type { IsNever } from '../never/never_type.js'
4
4
  * Check if `T` is a tuple and not an array.
5
5
  *
6
6
  * ```ts
7
- * import type { TupleType } from 'type-plus'
8
- *
9
7
  * type R = TupleType<[]> // []
10
8
  * type R = TupleType<[1]> // [1]
11
9
  *
@@ -25,8 +23,6 @@ export type TupleType<T, Then = T, Else = never> = IsNever<
25
23
  * Check if `T` is not a tuple.
26
24
  *
27
25
  * ```ts
28
- * import type { NotTupleType } from 'type-plus'
29
- *
30
26
  * type R = NotTupleType<[]> // never
31
27
  * type R = NotTupleType<[1]> // never
32
28
  *
@@ -42,8 +38,6 @@ export type NotTupleType<T, Then = T, Else = never> = TupleType<T, Else, Then>
42
38
  * Is `T` a tuple and not an array.
43
39
  *
44
40
  * ```ts
45
- * import type { IsTuple } from 'type-plus'
46
- *
47
41
  * type R = IsTuple<[]> // true
48
42
  *
49
43
  * type R = IsTuple<number[]> // false
@@ -58,8 +52,6 @@ export type IsTuple<T, Then = true, Else = false> = TupleType<T, Then, Else>
58
52
  * Is `T` not a tuple.
59
53
  *
60
54
  * ```ts
61
- * import type { IsNotTuple } from 'type-plus'
62
- *
63
55
  * type R = IsNotTuple<[]> // false
64
56
  * type R = IsNotTuple<[1]> // false
65
57
  *
package/ts/type/failed.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { uniSym } from './constants.js'
1
+ declare const uniSym: unique symbol
2
2
 
3
3
  /**
4
4
  * A failed type with message.
@@ -11,8 +11,6 @@ import { uniSym } from './constants.js'
11
11
  * use `FailedT` or create your own failed type instead.
12
12
  *
13
13
  * ```ts
14
- * import { Failed } from 'type-plus'
15
- *
16
14
  * type T = Failed<'error message'>
17
15
  * ```
18
16
  */
@@ -0,0 +1,24 @@
1
+ import { IsNull } from '../null/null_type.js'
2
+ import { Or } from '../predicates/logical.js'
3
+ import { IsUndefined } from '../undefined/undefined_type.js'
4
+
5
+ /**
6
+ * Prevents inference of a type parameter `T`.
7
+ *
8
+ * A build-in type `NoInfer` is coming soon.
9
+ * @see https://github.com/microsoft/TypeScript/pull/52968
10
+ *
11
+ * @by @ajafff
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * function assertEqual<T>(a: T, b: NoInfer<T>) {
16
+ * return a === b
17
+ * }
18
+ *
19
+ * assertEqual(123, 324) // OK
20
+ * assertEqual(123, 'abc') // Error
21
+ * assertEqual({ x: 1 }, { x: 1, y: 2 }) // Error
22
+ * ```
23
+ */
24
+ export type NoInfer<T> = Or<IsNull<T>, IsUndefined<T>, T, T & {}>