parent
e4a2801c98
commit
0a7205cd60
@ -0,0 +1,19 @@
|
||||
import type { Equal, Expect } from '@type-challenges/utils'
|
||||
|
||||
type cases = [
|
||||
Expect<Equal<SnakeCase<'hello'>, 'hello'>>,
|
||||
Expect<Equal<SnakeCase<'userName'>, 'user_name'>>,
|
||||
Expect<Equal<SnakeCase<'getElementById'>, 'get_element_by_id'>>,
|
||||
Expect<Equal<SnakeCase<'getElementById' | 'getElementByClassNames'>, 'get_element_by_id' | 'get_element_by_class_names'>>,
|
||||
]
|
||||
|
||||
type SnakeCase<
|
||||
T extends string,
|
||||
Acc extends string = '',
|
||||
> =
|
||||
T extends `${infer Head}${infer Tail}`
|
||||
? Head extends Lowercase<Head>
|
||||
? SnakeCase<Tail, `${Acc}${Head}`>
|
||||
: SnakeCase<Tail, `${Acc}_${Lowercase<Head>}`>
|
||||
: Acc
|
||||
;
|
||||
Loading…
Reference in new issue