zjutjh / WeJH-Taro

Taro + Vue3 微精弘小程序前端
18 stars 19 forks source link

实现一个将对象每个属性名 `snake_case` to `camelCase` 的转换函数 #135

Closed j10ccc closed 1 month ago

j10ccc commented 1 month ago

项目里面现在的接口响应 JSON,属性名没有做到命名统一。经过协商,新接口都会采用 snake_case,老接口的新字段也会采用。而前端定义的变量名规范是 camelCase。为了直接使用 JSON 中的属性,需要一个函数来把响应数据的 snake_case 转换成 camelCase,并提供 ts 类型上的支持。

具体需求期望在 js 侧实现对象属性名 snake_case 到 camelCase 的转换(考虑存在子对象的情况)。同时定义好接口响应的数据类型后,包一层 Camelize<Data> 就能拿到前端能直接使用的 camelCase 的类型。

type SnakeCaseExample = {
  red_apple: string;
  good_thing: {
    bad_animal: string;
  }
}

type Camelize<T> = {
  // TODO: 实现类型转换
}

// 类型应该为 { redApple: string; goodThing: { badAnimal: string; } }
type TransformedCase = Camelize<SnakeCaseExample>;