@airpower/enum 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -23
- package/dist/test.d.ts +1 -0
- package/package.json +2 -2
- package/docs/README.md +0 -9
- package/docs/base.md +0 -140
- package/docs/config.md +0 -3
- package/docs/decorator.md +0 -75
- package/docs/enums.md +0 -50
- package/docs/helper.md +0 -118
- package/docs/i18n.md +0 -7
- package/docs/transformer.md +0 -90
- /package/{docs → assets}/airpower-bg.svg +0 -0
- /package/{docs → assets}/airpower.svg +0 -0
package/README.md
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img width="300" src="./
|
|
3
|
-
</p>
|
|
4
|
-
|
|
5
|
-
<p align="center">
|
|
6
|
-
<img src="https://svg.hamm.cn?key=Lang&value=TypeScript&bg=green"/>
|
|
7
|
-
<img src="https://svg.hamm.cn?key=Build&value=Vite"/>
|
|
2
|
+
<img width="300" src="./assets/airpower-bg.svg"/>
|
|
8
3
|
</p>
|
|
9
4
|
|
|
10
5
|
<p align="center">
|
|
@@ -15,36 +10,62 @@
|
|
|
15
10
|
|
|
16
11
|
## 🎉 项目介绍
|
|
17
12
|
|
|
18
|
-
**AirPower
|
|
19
|
-
|
|
20
|
-
此项目是独立的 **工具包** ,我们还提供了很多的工具包,例如:
|
|
21
|
-
|
|
22
|
-
- **Vue3+TypeScript+ElementPlus+Vite** 的 **Web开发工具包**,
|
|
23
|
-
请查看 [AirPower4T](https://github.com/AirPowerTeam/AirPower4T)
|
|
24
|
-
- **[@airpower/web](https://www.npmjs.com/package/@airpower/web)** 适用于 **Web** 开发 (开发中,**AirPower4T** 的重构版)
|
|
25
|
-
- **[@airpower/uniapp](https://www.npmjs.com/package/@airpower/uniapp)** 适用于 **UniApp** 开发 (计划中)
|
|
26
|
-
- **[@airpower/electron](https://www.npmjs.com/package/@airpower/electron)** 适用于 **Electron** 开发 (计划中)
|
|
27
|
-
- **[@airpower/wechat](https://www.npmjs.com/package/@airpower/wechat)** 适用于 **微信小程序** 开发 (计划中)
|
|
13
|
+
**AirPower-Enum** 是一个基于 `TypeScript` 的封装的类似 `Java` 枚举类的枚举字典处理工具。
|
|
28
14
|
|
|
29
15
|
## 💻 如何安装
|
|
30
16
|
|
|
31
17
|
```shell
|
|
32
|
-
npm install airpower
|
|
18
|
+
npm install @airpower/enum
|
|
33
19
|
# or
|
|
34
|
-
yarn add airpower
|
|
20
|
+
yarn add @airpower/enum
|
|
35
21
|
# or
|
|
36
|
-
cnpm install airpower
|
|
22
|
+
cnpm install @airpower/enum
|
|
37
23
|
# or ...
|
|
38
24
|
```
|
|
39
25
|
|
|
40
|
-
## 📖
|
|
26
|
+
## 📖 如何使用
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import {Enum} from "@/airpower/enum";
|
|
30
|
+
|
|
31
|
+
class UserGender extends Enum<string> {
|
|
32
|
+
static MALE = new UserGender("MALE", "男");
|
|
33
|
+
static FEMALE = new UserGender("FEMALE", "女");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
class UserStatus extends Enum {
|
|
37
|
+
static NORMAL = new UserStatus(0, "正常");
|
|
38
|
+
static DISABLED = new UserStatus(1, "禁用");
|
|
39
|
+
}
|
|
41
40
|
|
|
42
|
-
|
|
41
|
+
// 扩展自定义属性
|
|
42
|
+
|
|
43
|
+
class Platform extends Enum<number> {
|
|
44
|
+
static readonly MAC = new Platform(1, 'mac', 'apple.png')
|
|
45
|
+
static readonly WINDOWS = new Platform(2, 'windows', 'windows.png')
|
|
46
|
+
static readonly ANDROID = new Platform(3, 'android', 'android.png')
|
|
47
|
+
|
|
48
|
+
icon!: string
|
|
49
|
+
|
|
50
|
+
constructor(key: number, label?: string, icon?: string) {
|
|
51
|
+
super(key, label)
|
|
52
|
+
if (icon) {
|
|
53
|
+
this.icon = icon
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static getIcon(this: EnumConstructor<number, Platform>, key: number) {
|
|
58
|
+
return this.get(key)!.icon
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
console.warn(Platform.getIcon(1))
|
|
63
|
+
console.warn(Platform.MAC.icon)
|
|
64
|
+
|
|
65
|
+
```
|
|
43
66
|
|
|
44
67
|
## ⏰ 欢迎反馈
|
|
45
68
|
|
|
46
69
|
如有疑问,可以通过本仓库的 **Issues** 与我们联系,如果你有一些代码贡献,可以通过 **Pull Request** 将代码贡献,为这个项目添砖加瓦。
|
|
47
70
|
|
|
48
|
-
> 高司令:“嗯?Java? 什么Java?”
|
|
49
|
-
|
|
50
71
|
如果有更多的需求和建议,欢迎通过本仓库的 `Issues` 提出,也欢迎加入 QQ群 555156313 与我们及时反馈。
|
package/dist/test.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@airpower/enum",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.2",
|
|
5
5
|
"description": "AirPower-Enum 是一个基于 TypeScript 的封装的类似 Java 枚举类的枚举字典处理工具。",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Hamm",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"types": "dist/index.d.ts",
|
|
32
32
|
"files": [
|
|
33
33
|
"dist",
|
|
34
|
-
"
|
|
34
|
+
"assets"
|
|
35
35
|
],
|
|
36
36
|
"scripts": {
|
|
37
37
|
"build": "tsc && vite build",
|
package/docs/README.md
DELETED
package/docs/base.md
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
# 📖 基类
|
|
2
|
-
|
|
3
|
-
**AirPower** 提供了 `AirPower` `IEntity` 等基类与接口,其中:
|
|
4
|
-
|
|
5
|
-
## AirPower
|
|
6
|
-
|
|
7
|
-
`AirPower` 是所有参与数据转换类的基类,它提供了一些基础的属性和方法,如:
|
|
8
|
-
|
|
9
|
-
### 静态方法
|
|
10
|
-
|
|
11
|
-
- #### `fromJson` 从 `JSON` 转换到当前类的对象
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
const user = User.fromJson({
|
|
15
|
-
id: 1,
|
|
16
|
-
nickName: "Hamm"
|
|
17
|
-
})
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
- #### `fromJsonArray` 从 `JSON` 数组转换到当前类的对象数组
|
|
21
|
-
|
|
22
|
-
```ts
|
|
23
|
-
const user = User.fromJsonArray([
|
|
24
|
-
{
|
|
25
|
-
id: 1,
|
|
26
|
-
nickName: "Hamm"
|
|
27
|
-
},
|
|
28
|
-
// ...
|
|
29
|
-
])
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
- #### `parse` 转换 `JSON` 为实体
|
|
33
|
-
|
|
34
|
-
```ts
|
|
35
|
-
const user = AirPower.parse(UserEntity, {
|
|
36
|
-
id: 1,
|
|
37
|
-
})
|
|
38
|
-
```
|
|
39
|
-
- #### `getModelConfig` 获取模型类配置项
|
|
40
|
-
|
|
41
|
-
```ts
|
|
42
|
-
const modelConfig = UserEntity.getModelConfig()
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
- #### `getModelName` 获取模型类的可阅读名字
|
|
46
|
-
|
|
47
|
-
```ts
|
|
48
|
-
// 用户
|
|
49
|
-
const modelName = UserEntity.getModelName()
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
- #### `getFieldName` 获取属性的可阅读名字
|
|
53
|
-
|
|
54
|
-
```ts
|
|
55
|
-
// 昵称
|
|
56
|
-
const fieldName = UserEntity.getFieldName("nickName")
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
- #### `getFieldConfig` 获取属性的配置
|
|
60
|
-
|
|
61
|
-
```ts
|
|
62
|
-
const fieldConfig = UserEntity.getFieldConfig("nickName")
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
- #### `newInstance` 创建一个当前类的实例
|
|
66
|
-
|
|
67
|
-
```ts
|
|
68
|
-
const user = UserEntity.newInstance({})
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### 实例方法
|
|
72
|
-
|
|
73
|
-
- #### `copy` 复制当前对象
|
|
74
|
-
|
|
75
|
-
```ts
|
|
76
|
-
const user = new User()
|
|
77
|
-
const user2 = user.copy()
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
- #### `expose` 暴露指定的一些属性
|
|
81
|
-
|
|
82
|
-
```ts
|
|
83
|
-
const user = new User()
|
|
84
|
-
user.expose("id", "nickname")
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
- #### `exclude` 排除指定的一些属性
|
|
88
|
-
|
|
89
|
-
```ts
|
|
90
|
-
const user = new User()
|
|
91
|
-
user.exclude("password")
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
- #### `recoverBy` 使用 **JSON** 对象进行相同属性覆盖
|
|
95
|
-
|
|
96
|
-
```ts
|
|
97
|
-
const user = new User()
|
|
98
|
-
user.recoverBy({
|
|
99
|
-
nickname: "Hamm"
|
|
100
|
-
})
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
- #### `toJson` 将当前对象转换为 **JSON** 对象
|
|
104
|
-
|
|
105
|
-
```ts
|
|
106
|
-
const user = new User()
|
|
107
|
-
const json = user.toJson()
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
- #### `getModelConfig` 获取类标记的配置
|
|
111
|
-
|
|
112
|
-
```ts
|
|
113
|
-
const user = new User()
|
|
114
|
-
const modelConfig = user.getModelConfig()
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
- #### `getModelName` 获取类标记的名称
|
|
118
|
-
|
|
119
|
-
```ts
|
|
120
|
-
const user = new User()
|
|
121
|
-
const modelName = user.getModelName()
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
- #### `getFieldName` 获取类属性标记的名称
|
|
125
|
-
|
|
126
|
-
```ts
|
|
127
|
-
const user = new User()
|
|
128
|
-
const fieldName = user.getFieldName("nickName")
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
- #### `getFieldConfig` 获取类属性标记的配置
|
|
132
|
-
|
|
133
|
-
```ts
|
|
134
|
-
const user = new User()
|
|
135
|
-
const fieldConfig = user.getFieldConfig("nickName")
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## `IEntity`
|
|
139
|
-
|
|
140
|
-
`IEntity` 指定包含 `id` 属性。
|
package/docs/config.md
DELETED
package/docs/decorator.md
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# 📖 装饰器文档
|
|
2
|
-
|
|
3
|
-
**AirPower** 提供了一些湿滑的装饰器,对数据转换、类和属性的扩展配置等提供了一些便捷的开发帮助。
|
|
4
|
-
|
|
5
|
-
## @Model 类配置
|
|
6
|
-
|
|
7
|
-
可以使用 `@Model()` 为类标记可读的 `label` 以及数据转换时候的统一前缀 `fieldPrefix`:
|
|
8
|
-
|
|
9
|
-
```typescript
|
|
10
|
-
// 配置装饰器
|
|
11
|
-
@Model({
|
|
12
|
-
label: '用户',
|
|
13
|
-
fieldPrefix: 'user_'
|
|
14
|
-
})
|
|
15
|
-
class User extends AirPower {
|
|
16
|
-
nickname!: string
|
|
17
|
-
|
|
18
|
-
age!: number
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const config = User.getModelConfig()
|
|
22
|
-
console.log(config)
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
将正常打印配置的 `label` 和 `fieldPrefix`:
|
|
26
|
-
|
|
27
|
-
```json
|
|
28
|
-
{
|
|
29
|
-
"label": "用户",
|
|
30
|
-
"fieldPrefix": "user_"
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
- **label**: 类的标签,如 `用户`
|
|
35
|
-
- **fieldPrefix**: 统一属性的前缀,如 `user_`,将在 [数据转换](./transformer.md) 中使用到。
|
|
36
|
-
|
|
37
|
-
## @Field 属性配置
|
|
38
|
-
|
|
39
|
-
可以使用 `@Field` 对类的属性进行配置:
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
class User extends AirPower {
|
|
43
|
-
@Field({
|
|
44
|
-
label: '昵称',
|
|
45
|
-
alias: 'name',
|
|
46
|
-
})
|
|
47
|
-
nickname!: string
|
|
48
|
-
|
|
49
|
-
@Field({
|
|
50
|
-
type: Number,
|
|
51
|
-
})
|
|
52
|
-
age!: number
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const config = User.getFieldConfig('nickname')
|
|
56
|
-
console.log(config)
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
将正常打印:
|
|
60
|
-
|
|
61
|
-
```json
|
|
62
|
-
{
|
|
63
|
-
"label": "昵称",
|
|
64
|
-
"alias": "name"
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### ```@Field()``` 中支持很多数据转换的配置,如:
|
|
69
|
-
|
|
70
|
-
- **alias**: 属性别名,用于数据转换时候的映射
|
|
71
|
-
- **label**: 属性描述
|
|
72
|
-
- **type**: 属性类型,如 `Number` `String` `RoleEntity` 等,将递归数据转换
|
|
73
|
-
- **array**: 是否是数组类型,将强制转换为数组类型
|
|
74
|
-
- **ignorePrefix**: 这个属性是否忽略类标记的 `fieldPrefix`
|
|
75
|
-
- **enums**: 枚举字典配置,用于数据转换时候的映射
|
package/docs/enums.md
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# 📖 枚举和字典
|
|
2
|
-
|
|
3
|
-
**AirPower** 提供了 `IEnum` `Enum` 类和接口:
|
|
4
|
-
|
|
5
|
-
## `IEnum`
|
|
6
|
-
|
|
7
|
-
`IEnum` 定义了标准接口的属性:
|
|
8
|
-
|
|
9
|
-
- `key` 字典的值
|
|
10
|
-
- `label` [可选]字典的描述
|
|
11
|
-
|
|
12
|
-
## `Enum`
|
|
13
|
-
|
|
14
|
-
`Enum` 是一个枚举类,提供了一些枚举封装方法
|
|
15
|
-
|
|
16
|
-
### 静态方法
|
|
17
|
-
|
|
18
|
-
- `key` 创建一个只有 Key 的字典数组
|
|
19
|
-
- `label` 创建一个字符串类型 label和key 一样的字典数组
|
|
20
|
-
- `get` 查找枚举值
|
|
21
|
-
- `getLabel` 获取枚举的标签
|
|
22
|
-
- `toArray` 将枚举转为数组
|
|
23
|
-
|
|
24
|
-
### 属性方法
|
|
25
|
-
|
|
26
|
-
- `equalsKey` 判断 `Key` 是否相等
|
|
27
|
-
- `notEqualsKey` 判断 `Label` 是否不相等
|
|
28
|
-
|
|
29
|
-
## 声明枚举
|
|
30
|
-
|
|
31
|
-
```typescript
|
|
32
|
-
export class GenderEnum extends Enum {
|
|
33
|
-
static MALE = new GenderEnum(1, '男')
|
|
34
|
-
static FEMALE = new GenderEnum(2, '女')
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export class GenderEnum extends Enum<string> {
|
|
38
|
-
static MALE = GenderEnum.label('男')
|
|
39
|
-
static FEMALE = GenderEnum.label('女')
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export class GenderEnum extends Enum {
|
|
43
|
-
static MALE = GenderEnum.key(1)
|
|
44
|
-
static FEMALE = GenderEnum.key(2)
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## 配合装饰器使用
|
|
49
|
-
|
|
50
|
-
枚举和字典都支持标记到 `@Field` 装饰器的 `enums` 属性上。
|
package/docs/helper.md
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
# 工具库
|
|
2
|
-
|
|
3
|
-
**AirPower** 提供了一些常用的工具类,你可以直接使用。
|
|
4
|
-
|
|
5
|
-
## CryptoUtil 编码和加解密
|
|
6
|
-
|
|
7
|
-
内置了 `AES加解密`、`SHA1`、`MD5`、`Base64` 等前端常用算法,可直接使用。
|
|
8
|
-
|
|
9
|
-
```typescript
|
|
10
|
-
CryptoUtil.aesEncrypt()
|
|
11
|
-
CryptoUtil.aesDecrypt()
|
|
12
|
-
CryptoUtil.sha1()
|
|
13
|
-
CryptoUtil.md5()
|
|
14
|
-
CryptoUtil.base64Encode()
|
|
15
|
-
CryptoUtil.base64Decode()
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## DateTimeUtil 时间与日期
|
|
19
|
-
|
|
20
|
-
提供了日期时间在前端常用的一些转换方法:
|
|
21
|
-
|
|
22
|
-
```typescript
|
|
23
|
-
// 休眠
|
|
24
|
-
await DateTimeUtil.sleep(3000)
|
|
25
|
-
|
|
26
|
-
// 格式化到Unix秒时间戳(默认当前时间)
|
|
27
|
-
DateTimeUtil.getUnixTimeStamps('2022-02-02 23:59:59')
|
|
28
|
-
|
|
29
|
-
// 格式化到毫秒时间戳(默认当前时间)
|
|
30
|
-
DateTimeUtil.getMilliTimeStamps('2022-02-02 23:59:59')
|
|
31
|
-
|
|
32
|
-
// 格式化到友好字符串显示
|
|
33
|
-
DateTimeUtil.getFriendlyDateTime('2022-02-02 23:59:59') // 三天前
|
|
34
|
-
|
|
35
|
-
// 使用指定的模板格式化
|
|
36
|
-
DateTimeFormatter.YYYY_MM_DD_HH_mm_ss.formatXXX(xxx)
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## DecoratorUtil 装饰器
|
|
40
|
-
|
|
41
|
-
装饰器助手类提供了一些设置和读取配置项的方法:
|
|
42
|
-
|
|
43
|
-
```typescript
|
|
44
|
-
// 反射添加属性
|
|
45
|
-
DecoratorUtil.setProperty()
|
|
46
|
-
|
|
47
|
-
// 设置一个类配置项
|
|
48
|
-
DecoratorUtil.setClassConfig()
|
|
49
|
-
|
|
50
|
-
// 递归获取指定类的配置项
|
|
51
|
-
DecoratorUtil.getClassConfig()
|
|
52
|
-
|
|
53
|
-
// 设置一个属性配置项
|
|
54
|
-
DecoratorUtil.setFieldConfig()
|
|
55
|
-
|
|
56
|
-
// 获取类指定属性的指定类型的配置
|
|
57
|
-
DecoratorUtil.getFieldConfig()
|
|
58
|
-
|
|
59
|
-
// 获取类标记了装饰器的属性列表
|
|
60
|
-
DecoratorUtil.getFieldList()
|
|
61
|
-
|
|
62
|
-
// 获取目标类指定属性列表的配置项列表
|
|
63
|
-
DecoratorUtil.getFieldConfigList()
|
|
64
|
-
|
|
65
|
-
// 获取目标类上指定属性的某个配置的值
|
|
66
|
-
DecoratorUtil.getFieldConfigValue()
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## FileUtil 文件
|
|
70
|
-
|
|
71
|
-
提供了一些常用文件处理方法
|
|
72
|
-
|
|
73
|
-
```typescript
|
|
74
|
-
// 字节数转可读文件大小
|
|
75
|
-
FileUtil.getFileSizeFriendly()
|
|
76
|
-
|
|
77
|
-
// 获取静态文件的绝对地址
|
|
78
|
-
FileUtil.getAbsoluteFileUrl()
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## RandomUtil 随机生成
|
|
82
|
-
|
|
83
|
-
提供了一些常用随机生成方法
|
|
84
|
-
|
|
85
|
-
```typescript
|
|
86
|
-
// 指定范围内获取随机整数
|
|
87
|
-
RandomUtil.getRandNumber()
|
|
88
|
-
|
|
89
|
-
// 获取随机数字字符串
|
|
90
|
-
RandomUtil.getRandNumberString()
|
|
91
|
-
|
|
92
|
-
// 获取随机字母字符串
|
|
93
|
-
RandomUtil.getRandCharString()
|
|
94
|
-
|
|
95
|
-
// 获取大小写混合随机字母字符串
|
|
96
|
-
RandomUtil.getRandMixedCharString()
|
|
97
|
-
|
|
98
|
-
// 获取字母加数字随机字符串
|
|
99
|
-
RandomUtil.getRandNumberAndCharString()
|
|
100
|
-
|
|
101
|
-
// 获取大小写字母加数字随机字符串
|
|
102
|
-
RandomUtil.getRandNumberAndMixedCharString()
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## StringUtil 字符串常见处理
|
|
106
|
-
|
|
107
|
-
提供了一些字符串处理的常见方法
|
|
108
|
-
|
|
109
|
-
```typescript
|
|
110
|
-
// 获取字符串可视化长度
|
|
111
|
-
StringUtil.getLength()
|
|
112
|
-
|
|
113
|
-
// 获取字符串可视化位置的内容
|
|
114
|
-
StringUtil.get()
|
|
115
|
-
|
|
116
|
-
// 字符串可视化截取
|
|
117
|
-
StringUtil.slice()
|
|
118
|
-
```
|
package/docs/i18n.md
DELETED
package/docs/transformer.md
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# 📖 数据转换
|
|
2
|
-
|
|
3
|
-
这一篇是需要重点讲的部分。
|
|
4
|
-
|
|
5
|
-
## 强制类型和数组
|
|
6
|
-
|
|
7
|
-
可以通过为 `@Field` 标记 `type` 来强制类型转换。
|
|
8
|
-
|
|
9
|
-
```typescript
|
|
10
|
-
class User extends AirPower {
|
|
11
|
-
@Field({
|
|
12
|
-
type: Number // 强制转换为数字类型
|
|
13
|
-
})
|
|
14
|
-
age!: number
|
|
15
|
-
|
|
16
|
-
@Field({
|
|
17
|
-
type: Role // 强制是Role类型
|
|
18
|
-
})
|
|
19
|
-
role!: Role
|
|
20
|
-
|
|
21
|
-
@Field({
|
|
22
|
-
type: Department, // 强制是Department类型
|
|
23
|
-
array: true // 指定是数组
|
|
24
|
-
})
|
|
25
|
-
departmentList: Department[] = []
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
那么,如果使用 `User.fromJson(json)`,那么 `json` 中的数据就会按照标记的装饰器类型进行类型转换。
|
|
30
|
-
|
|
31
|
-
**请注意,如果非简单类型,一定要标记 `type`,否则无法进行递归转换**
|
|
32
|
-
|
|
33
|
-
## 别名转换
|
|
34
|
-
|
|
35
|
-
别名转换适用于突然属性名称的变更,如 `nickname` -> `nickName`
|
|
36
|
-
|
|
37
|
-
```typescript
|
|
38
|
-
class User extends AirPower {
|
|
39
|
-
@Field({
|
|
40
|
-
alias: 'nickName'
|
|
41
|
-
})
|
|
42
|
-
nickname!: string
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## 固定前缀
|
|
47
|
-
|
|
48
|
-
有时候,后端提供的数据都带了统一的属性前缀:
|
|
49
|
-
|
|
50
|
-
```json
|
|
51
|
-
{
|
|
52
|
-
"user_id": 123,
|
|
53
|
-
"user_name": "userName",
|
|
54
|
-
"user_age": 18
|
|
55
|
-
}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
此时,我们可以通过类的装饰器 `@Model` 来配置属性前缀:
|
|
59
|
-
|
|
60
|
-
```typescript
|
|
61
|
-
|
|
62
|
-
@Model({
|
|
63
|
-
prefix: 'user_'
|
|
64
|
-
})
|
|
65
|
-
class User extends AirPower {
|
|
66
|
-
id!: number
|
|
67
|
-
name!: string
|
|
68
|
-
age!: number
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
如果,其中的某个属性不需要前缀,可以通过 `@Field` 的 `ignorePrefix` 来忽略:
|
|
73
|
-
|
|
74
|
-
```typescript
|
|
75
|
-
|
|
76
|
-
@Model({
|
|
77
|
-
prefix: 'user_'
|
|
78
|
-
})
|
|
79
|
-
class User extends AirPower {
|
|
80
|
-
// 其他需要前缀的属性
|
|
81
|
-
@Field({
|
|
82
|
-
ignorePrefix: true
|
|
83
|
-
})
|
|
84
|
-
bio!: string
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## 自定义转换
|
|
89
|
-
|
|
90
|
-
`@ToJson` `@ToModel` 可完成自定义转换
|
|
File without changes
|
|
File without changes
|