parent
148867f294
commit
89a725f664
@ -0,0 +1,31 @@
|
||||
import type { Equal, Expect } from '@type-challenges/utils'
|
||||
|
||||
type cases = [
|
||||
Expect<Equal<ToNumber<'0'>, 0>>,
|
||||
Expect<Equal<ToNumber<'5'>, 5>>,
|
||||
Expect<Equal<ToNumber<'12'>, 12>>,
|
||||
Expect<Equal<ToNumber<'27'>, 27>>,
|
||||
Expect<Equal<ToNumber<'18@7_$%'>, never>>,
|
||||
]
|
||||
|
||||
type Digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
|
||||
|
||||
type IsNumber<
|
||||
S extends string,
|
||||
> =
|
||||
S extends `${Digit}${infer Tail}`
|
||||
? IsNumber<Tail>
|
||||
: S extends ''
|
||||
? true
|
||||
: false
|
||||
;
|
||||
|
||||
type ToNumber<
|
||||
S extends string,
|
||||
Acc extends 1[] = []
|
||||
> =
|
||||
IsNumber<S> extends true
|
||||
? `${Acc['length']}` extends S
|
||||
? Acc['length']
|
||||
: ToNumber<S, [...Acc, 1]>
|
||||
: never
|
||||
Loading…
Reference in new issue