type-plus 6.4.0 → 6.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 (239) 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/nominal/brand.d.ts +7 -5
  36. package/cjs/nominal/brand.d.ts.map +1 -1
  37. package/cjs/nominal/brand.js +4 -4
  38. package/cjs/nominal/brand.js.map +1 -1
  39. package/cjs/nominal/{types.d.ts → constants.d.ts} +1 -1
  40. package/cjs/nominal/constants.d.ts.map +1 -0
  41. package/cjs/nominal/{types.js → constants.js} +1 -1
  42. package/cjs/nominal/constants.js.map +1 -0
  43. package/cjs/nominal/flavor.d.ts +14 -3
  44. package/cjs/nominal/flavor.d.ts.map +1 -1
  45. package/cjs/nominal/flavor.js +2 -2
  46. package/cjs/nominal/flavor.js.map +1 -1
  47. package/cjs/nominal/nominal_match.js +2 -2
  48. package/cjs/nominal/nominal_match.js.map +1 -1
  49. package/cjs/null/null_type.d.ts +4 -12
  50. package/cjs/null/null_type.d.ts.map +1 -1
  51. package/cjs/number/integer.d.ts +1 -9
  52. package/cjs/number/integer.d.ts.map +1 -1
  53. package/cjs/number/negative.d.ts +0 -8
  54. package/cjs/number/negative.d.ts.map +1 -1
  55. package/cjs/number/number_type.d.ts +0 -8
  56. package/cjs/number/number_type.d.ts.map +1 -1
  57. package/cjs/number/numeric_type.d.ts +0 -8
  58. package/cjs/number/numeric_type.d.ts.map +1 -1
  59. package/cjs/number/positive.d.ts +1 -9
  60. package/cjs/number/positive.d.ts.map +1 -1
  61. package/cjs/number/strict_number_type.d.ts +4 -12
  62. package/cjs/number/strict_number_type.d.ts.map +1 -1
  63. package/cjs/object/object_type.d.ts +1 -9
  64. package/cjs/object/object_type.d.ts.map +1 -1
  65. package/cjs/string/strict_string_type.d.ts +14 -19
  66. package/cjs/string/strict_string_type.d.ts.map +1 -1
  67. package/cjs/string/string.d.ts +24 -0
  68. package/cjs/string/string.d.ts.map +1 -0
  69. package/cjs/string/string.js +3 -0
  70. package/cjs/string/string.js.map +1 -0
  71. package/cjs/string/string_plus.d.ts +27 -0
  72. package/cjs/string/string_plus.d.ts.map +1 -0
  73. package/cjs/string/string_plus.js +3 -0
  74. package/cjs/string/string_plus.js.map +1 -0
  75. package/cjs/string/string_type.d.ts +4 -12
  76. package/cjs/string/string_type.d.ts.map +1 -1
  77. package/cjs/symbol/symbol_type.d.ts +5 -15
  78. package/cjs/symbol/symbol_type.d.ts.map +1 -1
  79. package/cjs/tuple/tuple_type.d.ts +0 -8
  80. package/cjs/tuple/tuple_type.d.ts.map +1 -1
  81. package/cjs/type/failed.d.ts +32 -0
  82. package/cjs/type/failed.d.ts.map +1 -0
  83. package/cjs/type/failed.js +3 -0
  84. package/cjs/type/failed.js.map +1 -0
  85. package/cjs/undefined/undefined_type.d.ts +4 -12
  86. package/cjs/undefined/undefined_type.d.ts.map +1 -1
  87. package/cjs/union/union_to_intersection.d.ts.map +1 -0
  88. package/cjs/union/union_to_intersection.js.map +1 -0
  89. package/cjs/unknown/unknown_type.d.ts +4 -12
  90. package/cjs/unknown/unknown_type.d.ts.map +1 -1
  91. package/cjs/void/void_type.d.ts +0 -8
  92. package/cjs/void/void_type.d.ts.map +1 -1
  93. package/esm/any/any_or_never.d.ts +0 -2
  94. package/esm/any/any_or_never.d.ts.map +1 -1
  95. package/esm/any/any_type.d.ts +2 -6
  96. package/esm/any/any_type.d.ts.map +1 -1
  97. package/esm/array/array.d.ts +0 -4
  98. package/esm/array/array.d.ts.map +1 -1
  99. package/esm/array/array_index.d.ts +7 -10
  100. package/esm/array/array_index.d.ts.map +1 -1
  101. package/esm/array/array_type.d.ts +0 -8
  102. package/esm/array/array_type.d.ts.map +1 -1
  103. package/esm/bigint/bigint_type.d.ts +4 -12
  104. package/esm/bigint/bigint_type.d.ts.map +1 -1
  105. package/esm/bigint/strict_bigint_type.d.ts +4 -12
  106. package/esm/bigint/strict_bigint_type.d.ts.map +1 -1
  107. package/esm/boolean/boolean_type.d.ts +0 -8
  108. package/esm/boolean/boolean_type.d.ts.map +1 -1
  109. package/esm/boolean/false_type.d.ts +0 -8
  110. package/esm/boolean/false_type.d.ts.map +1 -1
  111. package/esm/boolean/strict_boolean_type.d.ts +0 -8
  112. package/esm/boolean/strict_boolean_type.d.ts.map +1 -1
  113. package/esm/boolean/true_type.d.ts +0 -8
  114. package/esm/boolean/true_type.d.ts.map +1 -1
  115. package/esm/equal/equal.d.ts +4 -5
  116. package/esm/equal/equal.d.ts.map +1 -1
  117. package/esm/function/function_type.d.ts +0 -8
  118. package/esm/function/function_type.d.ts.map +1 -1
  119. package/esm/function/strict_function_type.d.ts +0 -8
  120. package/esm/function/strict_function_type.d.ts.map +1 -1
  121. package/esm/index.d.ts +3 -0
  122. package/esm/index.d.ts.map +1 -1
  123. package/esm/index.js.map +1 -1
  124. package/esm/never/never_type.d.ts +2 -10
  125. package/esm/never/never_type.d.ts.map +1 -1
  126. package/esm/nominal/brand.d.ts +7 -5
  127. package/esm/nominal/brand.d.ts.map +1 -1
  128. package/esm/nominal/brand.js +4 -4
  129. package/esm/nominal/brand.js.map +1 -1
  130. package/esm/nominal/{types.d.ts → constants.d.ts} +1 -1
  131. package/esm/nominal/constants.d.ts.map +1 -0
  132. package/esm/nominal/{types.js → constants.js} +1 -1
  133. package/esm/nominal/constants.js.map +1 -0
  134. package/esm/nominal/flavor.d.ts +14 -3
  135. package/esm/nominal/flavor.d.ts.map +1 -1
  136. package/esm/nominal/flavor.js +1 -1
  137. package/esm/nominal/flavor.js.map +1 -1
  138. package/esm/nominal/nominal_match.js +1 -1
  139. package/esm/nominal/nominal_match.js.map +1 -1
  140. package/esm/null/null_type.d.ts +4 -12
  141. package/esm/null/null_type.d.ts.map +1 -1
  142. package/esm/number/integer.d.ts +1 -9
  143. package/esm/number/integer.d.ts.map +1 -1
  144. package/esm/number/negative.d.ts +0 -8
  145. package/esm/number/negative.d.ts.map +1 -1
  146. package/esm/number/number_type.d.ts +0 -8
  147. package/esm/number/number_type.d.ts.map +1 -1
  148. package/esm/number/numeric_type.d.ts +0 -8
  149. package/esm/number/numeric_type.d.ts.map +1 -1
  150. package/esm/number/positive.d.ts +1 -9
  151. package/esm/number/positive.d.ts.map +1 -1
  152. package/esm/number/strict_number_type.d.ts +4 -12
  153. package/esm/number/strict_number_type.d.ts.map +1 -1
  154. package/esm/object/object_type.d.ts +1 -9
  155. package/esm/object/object_type.d.ts.map +1 -1
  156. package/esm/string/strict_string_type.d.ts +14 -19
  157. package/esm/string/strict_string_type.d.ts.map +1 -1
  158. package/esm/string/string.d.ts +24 -0
  159. package/esm/string/string.d.ts.map +1 -0
  160. package/esm/string/string.js +2 -0
  161. package/esm/string/string.js.map +1 -0
  162. package/esm/string/string_plus.d.ts +27 -0
  163. package/esm/string/string_plus.d.ts.map +1 -0
  164. package/esm/string/string_plus.js +2 -0
  165. package/esm/string/string_plus.js.map +1 -0
  166. package/esm/string/string_type.d.ts +4 -12
  167. package/esm/string/string_type.d.ts.map +1 -1
  168. package/esm/symbol/symbol_type.d.ts +5 -15
  169. package/esm/symbol/symbol_type.d.ts.map +1 -1
  170. package/esm/tuple/tuple_type.d.ts +0 -8
  171. package/esm/tuple/tuple_type.d.ts.map +1 -1
  172. package/esm/type/failed.d.ts +32 -0
  173. package/esm/type/failed.d.ts.map +1 -0
  174. package/esm/type/failed.js +2 -0
  175. package/esm/type/failed.js.map +1 -0
  176. package/esm/undefined/undefined_type.d.ts +4 -12
  177. package/esm/undefined/undefined_type.d.ts.map +1 -1
  178. package/esm/union/union_to_intersection.d.ts.map +1 -0
  179. package/esm/union/union_to_intersection.js.map +1 -0
  180. package/esm/unknown/unknown_type.d.ts +4 -12
  181. package/esm/unknown/unknown_type.d.ts.map +1 -1
  182. package/esm/void/void_type.d.ts +0 -8
  183. package/esm/void/void_type.d.ts.map +1 -1
  184. package/package.json +6 -6
  185. package/ts/any/any_or_never.ts +0 -2
  186. package/ts/any/any_type.ts +2 -6
  187. package/ts/array/array.ts +0 -4
  188. package/ts/array/array_index.ts +7 -10
  189. package/ts/array/array_type.ts +0 -8
  190. package/ts/assertion/readme.md +1 -2
  191. package/ts/bigint/bigint_type.ts +4 -12
  192. package/ts/bigint/strict_bigint_type.ts +4 -12
  193. package/ts/boolean/boolean_type.ts +0 -8
  194. package/ts/boolean/false_type.ts +0 -8
  195. package/ts/boolean/strict_boolean_type.ts +0 -8
  196. package/ts/boolean/true_type.ts +0 -8
  197. package/ts/equal/equal.ts +9 -5
  198. package/ts/equal/readme.md +3 -0
  199. package/ts/function/function_type.ts +0 -8
  200. package/ts/function/strict_function_type.ts +0 -8
  201. package/ts/index.ts +4 -0
  202. package/ts/never/never_type.ts +2 -10
  203. package/ts/nominal/brand.ts +15 -7
  204. package/ts/nominal/flavor.ts +17 -2
  205. package/ts/nominal/nominal_match.ts +1 -1
  206. package/ts/null/null_type.ts +4 -12
  207. package/ts/number/integer.ts +1 -9
  208. package/ts/number/negative.ts +0 -8
  209. package/ts/number/number_type.ts +0 -8
  210. package/ts/number/numeric_type.ts +0 -8
  211. package/ts/number/positive.ts +1 -9
  212. package/ts/number/strict_number_type.ts +4 -12
  213. package/ts/object/object_type.ts +1 -9
  214. package/ts/string/readme.md +5 -0
  215. package/ts/string/strict_string_type.ts +15 -19
  216. package/ts/string/string.ts +36 -0
  217. package/ts/string/string_plus.ts +33 -0
  218. package/ts/string/string_type.ts +4 -12
  219. package/ts/symbol/symbol_type.ts +5 -17
  220. package/ts/tuple/tuple_type.ts +0 -8
  221. package/ts/type/failed.ts +32 -0
  222. package/ts/type/readme.md +22 -0
  223. package/ts/undefined/undefined_type.ts +4 -12
  224. package/ts/unknown/unknown_type.ts +4 -12
  225. package/ts/void/void_type.ts +0 -8
  226. package/cjs/nominal/types.d.ts.map +0 -1
  227. package/cjs/nominal/types.js.map +0 -1
  228. package/cjs/union_to_intersection.d.ts.map +0 -1
  229. package/cjs/union_to_intersection.js.map +0 -1
  230. package/esm/nominal/types.d.ts.map +0 -1
  231. package/esm/nominal/types.js.map +0 -1
  232. package/esm/union_to_intersection.d.ts.map +0 -1
  233. package/esm/union_to_intersection.js.map +0 -1
  234. /package/cjs/{union_to_intersection.d.ts → union/union_to_intersection.d.ts} +0 -0
  235. /package/cjs/{union_to_intersection.js → union/union_to_intersection.js} +0 -0
  236. /package/esm/{union_to_intersection.d.ts → union/union_to_intersection.d.ts} +0 -0
  237. /package/esm/{union_to_intersection.js → union/union_to_intersection.js} +0 -0
  238. /package/ts/nominal/{types.ts → constants.ts} +0 -0
  239. /package/ts/{union_to_intersection.ts → union/union_to_intersection.ts} +0 -0
@@ -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
@@ -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
  *
@@ -0,0 +1,32 @@
1
+ declare const uniSym: unique symbol
2
+
3
+ /**
4
+ * A failed type with message.
5
+ *
6
+ * This is analogous to the `Error` class in JavaScript.
7
+ *
8
+ * It can be used in type-level programming to failed an error message.
9
+ *
10
+ * If you want to add additional type information,
11
+ * use `FailedT` or create your own failed type instead.
12
+ *
13
+ * ```ts
14
+ * type T = Failed<'error message'>
15
+ * ```
16
+ */
17
+ export interface Failed<Msg extends string> {
18
+ [uniSym]: Msg
19
+ }
20
+
21
+ /**
22
+ * A failed type with message and one additional type.
23
+ *
24
+ * Use this to add a generic type to the failed type.
25
+ *
26
+ * e.g. `FailedT<'missing', number | string>`
27
+ *
28
+ * It's recommended to create custom failed types instead of using this to provide better message.
29
+ */
30
+ export interface FailedT<Msg extends string, T> {
31
+ [uniSym]: Msg
32
+ }
@@ -0,0 +1,22 @@
1
+ # type
2
+
3
+ General type utilities.
4
+
5
+ ## Failed
6
+
7
+ `Failed<Msg>` is a type to describe a failure.
8
+
9
+ Use the same concept to create your own failure types.
10
+
11
+ ```ts
12
+ import { type Failed } from 'type-plus'
13
+
14
+ type YourComplexType<A,B,C> = A extends B ?
15
+ ... // and many more hard work later...
16
+ : Failed<'you are doing something wrong!'>
17
+ ```
18
+
19
+ [![Just Code: I failed][failed-type]][failed-type-url]
20
+
21
+ [failed-type]: https://img.youtube.com/vi/3pEXVe6KJO4/0.jpg
22
+ [failed-type-url]: https://www.youtube.com/live/3pEXVe6KJO4
@@ -3,9 +3,7 @@ import type { IsAny } from '../any/any_type.js'
3
3
  /**
4
4
  * Check if the type `T` is exactly `undefined`.
5
5
  *
6
- * ```
7
- * import type { UndefinedType } from 'type-plus'
8
- *
6
+ * ```ts
9
7
  * type R = UndefinedType<undefined> // undefined
10
8
  *
11
9
  * type R = UndefinedType<never> // never
@@ -22,9 +20,7 @@ export type UndefinedType<T, Then = T, Else = never> = IsAny<
22
20
  /**
23
21
  * Is the type `T` exactly `undefined`.
24
22
  *
25
- * ```
26
- * import type { IsUndefined } from 'type-plus'
27
- *
23
+ * ```ts
28
24
  * type R = IsUndefined<undefined> // true
29
25
  *
30
26
  * type R = IsUndefined<never> // false
@@ -37,9 +33,7 @@ export type IsUndefined<T, Then = true, Else = false> = UndefinedType<T, Then, E
37
33
  /**
38
34
  * Check if the type `T` is not `undefined`.
39
35
  *
40
- * ```
41
- * import type { NotUndefinedType } from 'type-plus'
42
- *
36
+ * ```ts
43
37
  * type R = NotUndefinedType<undefined> // never
44
38
  *
45
39
  * type R = NotUndefinedType<never> // never
@@ -52,9 +46,7 @@ export type NotUndefinedType<T, Then = T, Else = never> = UndefinedType<T, Else,
52
46
  /**
53
47
  * Is the type `T` not `undefined`.
54
48
  *
55
- * ```
56
- * import type { IsNotUndefined } from 'type-plus'
57
- *
49
+ * ```ts
58
50
  * type R = IsNotUndefined<undefined> // false
59
51
  *
60
52
  * type R = IsNotUndefined<never> // true
@@ -3,9 +3,7 @@ import type { IsAny } from '../any/any_type.js'
3
3
  /**
4
4
  * Check if the type `T` is exactly `unknown`.
5
5
  *
6
- * ```
7
- * import type { UnknownType } from 'type-plus'
8
- *
6
+ * ```ts
9
7
  * type R = UnknownType<unknown> // unknown
10
8
  *
11
9
  * type R = UnknownType<number> // never
@@ -21,9 +19,7 @@ export type UnknownType<T, Then = T, Else = never> = IsAny<
21
19
  /**
22
20
  * Is the type `T` exactly `unknown`.
23
21
  *
24
- * ```
25
- * import type { IsUnknown } from 'type-plus'
26
- *
22
+ * ```ts
27
23
  * type R = IsUnknown<unknown> // true
28
24
  *
29
25
  * type R = IsUnknown<number> // false
@@ -35,9 +31,7 @@ export type IsUnknown<T, Then = true, Else = false> = UnknownType<T, Then, Else>
35
31
  /**
36
32
  * Check if the type `T` is not `unknown`.
37
33
  *
38
- * ```
39
- * import type { NotUnknownType } from 'type-plus'
40
- *
34
+ * ```ts
41
35
  * type R = NotUnknownType<unknown> // never
42
36
  *
43
37
  * type R = NotUnknownType<never> // never
@@ -50,9 +44,7 @@ export type NotUnknownType<T, Then = T, Else = never> = UnknownType<T, Else, The
50
44
  /**
51
45
  * Is the type `T` not exactly `unknown`.
52
46
  *
53
- * ```
54
- * import type { IsNotUnknown } from 'type-plus'
55
- *
47
+ * ```ts
56
48
  * type R = IsNotUnknown<unknown> // false
57
49
  *
58
50
  * type R = IsNotUnknown<never> // true
@@ -5,8 +5,6 @@ import type { IsUndefined } from '../undefined/undefined_type.js'
5
5
  * Check if `T` is `void`.
6
6
  *
7
7
  * ```ts
8
- * import type { VoidType } from 'type-plus'
9
- *
10
8
  * type R = VoidType<void> // void
11
9
  *
12
10
  * type R = VoidType<1> // never
@@ -22,8 +20,6 @@ export type VoidType<T, Then = T, Else = never> = IsAnyOrNever<
22
20
  * Check if `T` is not `void`.
23
21
  *
24
22
  * ```ts
25
- * import type { VoidType } from 'type-plus'
26
- *
27
23
  * type R = VoidType<void> // never
28
24
  *
29
25
  * type R = VoidType<1> // 1
@@ -35,8 +31,6 @@ export type NotVoidType<T, Then = T, Else = never> = VoidType<T, Else, Then>
35
31
  * Is `T` `void`.
36
32
  *
37
33
  * ```ts
38
- * import type { IsVoid } from 'type-plus'
39
- *
40
34
  * type R = IsVoid<void> // true
41
35
  *
42
36
  * type R = IsVoid<1> // false
@@ -48,8 +42,6 @@ export type IsVoid<T, Then = true, Else = false> = VoidType<T, Then, Else>
48
42
  * Is `T` not `void`.
49
43
  *
50
44
  * ```ts
51
- * import type { IsNotVoid } from 'type-plus'
52
- *
53
45
  * type R = IsNotVoid<void> // false
54
46
  *
55
47
  * type R = IsNotVoid<1> // true
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../ts/nominal/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,eAAiB,CAAA;AACrC,eAAO,MAAM,QAAQ,eAAkB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../ts/nominal/types.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACxB,QAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"union_to_intersection.d.ts","sourceRoot":"","sources":["../ts/union_to_intersection.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GACvG,CAAC,GACD,KAAK,CAAA;AAER,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAElE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"union_to_intersection.js","sourceRoot":"","sources":["../ts/union_to_intersection.ts"],"names":[],"mappings":";;;AAMA,SAAgB,cAAc,CAAI,KAAQ;IACzC,OAAO,KAAsC,CAAA;AAC9C,CAAC;AAFD,wCAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../ts/nominal/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,eAAiB,CAAA;AACrC,eAAO,MAAM,QAAQ,eAAkB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../ts/nominal/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACrC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"union_to_intersection.d.ts","sourceRoot":"","sources":["../ts/union_to_intersection.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GACvG,CAAC,GACD,KAAK,CAAA;AAER,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAElE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"union_to_intersection.js","sourceRoot":"","sources":["../ts/union_to_intersection.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,cAAc,CAAI,KAAQ;IACzC,OAAO,KAAsC,CAAA;AAC9C,CAAC"}
File without changes