Skip to content

Latest commit

 

History

History
32 lines (23 loc) · 1.21 KB

SnakeCase.md

File metadata and controls

32 lines (23 loc) · 1.21 KB
标题 标签
SnakeCase(下划线字符串转换) extends,infer(继承,推断)

下划线字符串转换。

  • 使用 infer 关键字推断字符串参数 T 的每一个字符,如果字符(使用 Uppercase 类型转成大写字母比较)等于大写字符,则转成下划线,并递归剩余字符,否则就不转,但也需要递归剩余字符,否则返回空字符串。

代码如下:

type SnakeCase<T extends string> = T extends `${infer F}${infer R}`
  ? Uppercase<F> extends F
    ? `_${Lowercase<F>}${SnakeCase<R>}`
    : `${F}${SnakeCase<R>}`
  : '';

使用方式:

type SnakeCaseRes1 = SnakeCase<'hello'>; // 'hello'
type SnakeCaseRes2 = SnakeCase<'userName'>; // 'user_name'
type SnakeCaseRes3 = SnakeCase<'getElementById'>; // 'get_element_by_id'
type SnakeCaseRes4 = SnakeCase<'getElementById' | 'getElementByClassNames'>; // 'get_element_by_id' | 'get_element_by_class_names'

应用场景

如下所示,鼠标悬浮到对应的类型变量可以查看类型。