Skip to content

Commit beea535

Browse files
committed
feat(#125): finish PositiveFloatString<S>
1 parent 1ca8deb commit beea535

File tree

3 files changed

+61
-1
lines changed

3 files changed

+61
-1
lines changed

src/types.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,27 @@ export type PositiveFloat<N extends Numeric> = IfEquals<
138138
never
139139
>;
140140

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+
141162
/**
142163
* Type representing a float that's in ]-∞, 0[
143164
*/
@@ -167,6 +188,7 @@ export type NegativeFloatString<S extends string> = IfEquals<
167188
Float<NumerifyString<S>>,
168189
never
169190
>;
191+
170192
/**
171193
* Is it a negative float ?
172194
* @return

tests/negative-float-string.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,3 @@ test(() => {
3333
const result: TestType<NegativeFloatString<'-1'>, never, true> = true;
3434
expect(result).toBe(true);
3535
});
36-

tests/positive-float-string.test.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
});

0 commit comments

Comments
 (0)