File tree Expand file tree Collapse file tree 3 files changed +61
-1
lines changed Expand file tree Collapse file tree 3 files changed +61
-1
lines changed Original file line number Diff line number Diff line change @@ -138,6 +138,27 @@ export type PositiveFloat<N extends Numeric> = IfEquals<
138
138
never
139
139
> ;
140
140
141
+ /**
142
+ * Represents a positive float parsed from a string.
143
+ * If the string does not represent a positive float, it resolves to `never`, else
144
+ * it resolves to its float representation.
145
+ * @example
146
+ * ````ts
147
+ PositiveFloatString<'0'>; // never
148
+ PositiveFloatString<'82739283293237'>; // works
149
+ PositiveFloatString<'-82739.283293237'>; // never
150
+ PositiveFloatString<'-1'>; // never
151
+ PositiveFloatString<'1.98'>; // works
152
+ PositiveFloatString<'-1.98'>; // never
153
+ * ````
154
+ */
155
+ export type PositiveFloatString < S extends string > = IfEquals <
156
+ IsPositiveFloat < Float < NumerifyString < S > > > ,
157
+ true ,
158
+ Float < NumerifyString < S > > ,
159
+ never
160
+ > ;
161
+
141
162
/**
142
163
* Type representing a float that's in ]-∞, 0[
143
164
*/
@@ -167,6 +188,7 @@ export type NegativeFloatString<S extends string> = IfEquals<
167
188
Float < NumerifyString < S > > ,
168
189
never
169
190
> ;
191
+
170
192
/**
171
193
* Is it a negative float ?
172
194
* @return
Original file line number Diff line number Diff line change @@ -33,4 +33,3 @@ test(() => {
33
33
const result : TestType < NegativeFloatString < '-1' > , never , true > = true ;
34
34
expect ( result ) . toBe ( true ) ;
35
35
} ) ;
36
-
Original file line number Diff line number Diff line change
1
+ import { PositiveFloatString , TestType } from '@/types' ;
2
+ import { test , expect } from 'vitest' ;
3
+
4
+ test ( ( ) => {
5
+ const result : TestType < PositiveFloatString < '0' > , never , true > = true ;
6
+ expect ( result ) . toBe ( true ) ;
7
+ } ) ;
8
+
9
+ test ( ( ) => {
10
+ const result : TestType <
11
+ PositiveFloatString < '-82739283293237' > ,
12
+ never ,
13
+ true
14
+ > = true ;
15
+ expect ( result ) . toBe ( true ) ;
16
+ } ) ;
17
+
18
+ test ( ( ) => {
19
+ const result : TestType <
20
+ PositiveFloatString < '82739.283293237' > ,
21
+ 82739.283293237 ,
22
+ true
23
+ > = true ;
24
+ expect ( result ) . toBe ( true ) ;
25
+ } ) ;
26
+
27
+ test ( ( ) => {
28
+ const result : TestType < PositiveFloatString < '-0.54' > , never , true > = true ;
29
+ expect ( result ) . toBe ( true ) ;
30
+ } ) ;
31
+
32
+ test ( ( ) => {
33
+ const result : TestType < PositiveFloatString < '0.54' > , 0.54 , true > = true ;
34
+ expect ( result ) . toBe ( true ) ;
35
+ } ) ;
36
+ test ( ( ) => {
37
+ const result : TestType < PositiveFloatString < '-1' > , never , true > = true ;
38
+ expect ( result ) . toBe ( true ) ;
39
+ } ) ;
You can’t perform that action at this time.
0 commit comments