-
-
Notifications
You must be signed in to change notification settings - Fork 724
Expand file tree
/
Copy pathstring-to-number.d.ts
More file actions
67 lines (51 loc) · 1.66 KB
/
Copy pathstring-to-number.d.ts
File metadata and controls
67 lines (51 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import type {IfNotAnyOrNever} from './internal/type.d.ts';
import type {NegativeInfinity, PositiveInfinity} from './numeric.d.ts';
/**
Converts a numeric string to a number.
@example
```
import type {StringToNumber} from 'type-fest';
type PositiveInteger = StringToNumber<'1234'>;
//=> 1234
type NegativeInteger = StringToNumber<'-1234'>;
//=> -1234
type PositiveFloat = StringToNumber<'1234.56'>;
//=> 1234.56
type NegativeFloat = StringToNumber<'-1234.56'>;
//=> -1234.56
type PositiveInfinity = StringToNumber<'Infinity'>;
//=> Infinity
type NegativeInfinity = StringToNumber<'-Infinity'>;
//=> -Infinity
```
Note: Some strings, such as `'1.50'`, `'0b10'`, or `'12_345'`, may look like they can be converted to numbers, but they don't actually have corresponding numeric literals. So, in such cases, this type produces `never`. See [type-fest#1446](https://github.com/sindresorhus/type-fest/pull/1446) for more details.
@example
```
import type {StringToNumber} from 'type-fest';
type FractionalsEndingInZero = StringToNumber<'1.50'>;
//=> never
type NonDecimalBases = StringToNumber<'0b10' | '0o10' | '0x10'>;
//=> never
type NumericSeparators = StringToNumber<'12_345'>;
//=> never
```
@category String
@category Numeric
@category Template literal
*/
export type StringToNumber<S extends string> = IfNotAnyOrNever<S, {ifNot: _StringToNumber<S>; ifAny: number}>;
type _StringToNumber<S extends string> =
S extends `${infer N extends number}`
? number extends N
? `${number}` extends S
? N
: never
: N
: string extends S
? number
: S extends 'Infinity'
? PositiveInfinity
: S extends '-Infinity'
? NegativeInfinity
: never;
export {};