API 参考
Strap-Trousers 提供了两种主要的 API 封装方式:StrawPlus(装饰器模式)和 StrawApi(函数式模式),以及丰富的工具函数。
核心 API
StrawPlus 装饰器
基于装饰器模式的 API 封装,使用类的方式定义接口。
typescript
import { StrawPlus, ConnectStrawPlus, Get, Post } from 'strap-trousers'
@ConnectStrawPlus({
baseURL: 'https://api.example.com',
timeout: 5000
})
class UserAPI {
@Get('/users')
getUsers(params: any) {
return params
}
@Post('/users')
createUser(data: any) {
return data
}
}
const userAPI = new UserAPI()
const users = await userAPI.getUsers({ page: 1 })详细文档:StrawPlus API
StrawApi 函数式
基于函数式的 API 封装,提供更灵活的编程方式。
typescript
import { connectStraw } from 'strap-trousers'
const api = connectStraw({
config: {
lib: axios,
name: 'api',
rootUrl: 'https://api.example.com',
timeout: 5000
},
action: {
getUsers: () => ({
url: '/users',
method: 'GET'
}),
createUser: () => ({
url: '/users',
method: 'POST'
})
}
})
// 使用
const users = await api.getUsers({ page: 1 })
const newUser = await api.createUser({ name: 'John' })详细文档:StrawApi API
工具函数 API
数据处理
encryption - 数据加密
typescript
function encryption(data: string): string加密字符串数据,使用简单的字符替换算法。
javascript
import { encryption } from 'strap-trousers'
const encrypted = encryption('sensitive data')
console.log(encrypted) // 加密后的字符串decrypt - 数据解密
typescript
function decrypt(data: string): string解密 encryption 函数加密的数据。
javascript
import { decrypt } from 'strap-trousers'
const decrypted = decrypt(encryptedData)
console.log(decrypted) // 原始数据详细文档:数据处理工具
数组操作
splitArray - 数组分割
typescript
function splitArray<T>(array: T[], size: number): T[][]将数组按指定大小分割成多个子数组。
javascript
import { splitArray } from 'strap-trousers'
const arr = [1, 2, 3, 4, 5, 6]
const chunks = splitArray(arr, 2)
console.log(chunks) // [[1, 2], [3, 4], [5, 6]]arrayFoldFront - 数组折叠前置
typescript
function arrayFoldFront<T>(array: T[], columns: number, concat?: boolean): T[][] | T[]将数组元素按列分配,并将元素横向前置。
javascript
import { arrayFoldFront } from 'strap-trousers'
const array = [1, 2, 3, 4, 5, 6, 7, 8]
const result = arrayFoldFront(array, 3)
console.log(result) // [[1, 4, 7], [2, 5, 8], [3, 6]]
// 合并结果
const result2 = arrayFoldFront(array, 3, true)
console.log(result2) // [1, 4, 7, 2, 5, 8, 3, 6]详细文档:数组操作工具
对象操作
deepClone - 深拷贝
typescript
function deepClone<T>(obj: T): T深度克隆对象,支持嵌套对象和数组。
javascript
import { deepClone } from 'strap-trousers'
const original = { a: 1, b: { c: 2 } }
const cloned = deepClone(original)
cloned.b.c = 3
console.log(original.b.c) // 2 (原对象不受影响)copyValueOfTheSameKey - 复制相同键的值
typescript
function copyValueOfTheSameKey(options: {
dataSource: object
targetSource: object
exclude?: string[]
}): object将源对象中与目标对象相同键的值复制到目标对象。
javascript
import { copyValueOfTheSameKey } from 'strap-trousers'
const result = copyValueOfTheSameKey({
dataSource: { a: 1, b: 2, c: 3 },
targetSource: { a: 0, b: 0, d: 4 }
})
console.log(result) // { a: 1, b: 2, d: 4 }
// 排除特定字段
const result2 = copyValueOfTheSameKey({
dataSource: { a: 1, b: 2, c: 3 },
targetSource: { a: 0, b: 0, d: 4 },
exclude: ['b']
})
console.log(result2) // { a: 1, b: 0, d: 4 }
#### formatString - 字符串格式转换
```typescript
function formatString(str: string): string将字符串中的字符按照预定义规则进行映射转换。
javascript
import { formatString } from 'strap-trousers'
// 基本使用
const result = formatString('a')
console.log(result) // "zy"
// 反向映射
const original = formatString('zy')
console.log(original) // "a"deleteSameKeyOfTheSameValue - 删除相同键值
typescript
function deleteSameKeyOfTheSameValue(options: {
befor: object
after: object
exclude?: (string | number)[]
}): object删除目标对象中与源对象相同键且相同值的属性。
javascript
import { deleteSameKeyOfTheSameValue } from 'strap-trousers'
const result = deleteSameKeyOfTheSameValue({
befor: { a: 1, b: 2 },
after: { a: 1, b: 3, c: 4 }
})
console.log(result) // { b: 3, c: 4 }
// 排除特定字段
const result2 = deleteSameKeyOfTheSameValue({
befor: { a: 1, b: 2 },
after: { a: 1, b: 2, c: 4 },
exclude: ['b']
})
console.log(result2) // { a: 1, b: 2, c: 4 }
详细文档:[对象操作工具](../guide/utils/object.md)
### 时间处理
#### splitTime - 时间差计算
```typescript
interface dataDto {
time: string | number
fillWithZeros?: boolean
}
function splitTime(data: dataDto): {
year: number
month: number
week: number
day: string
hour: string
minute: string
second: string
}计算当前时间与目标时间的时间差。
javascript
import { splitTime } from 'strap-trousers'
const diff = splitTime({
time: '2024-12-31 23:59:59',
fillWithZeros: true
})
console.log(diff)
// {
// year: 0,
// month: 3,
// week: 12,
// day: '85',
// hour: '14',
// minute: '30',
// second: '45'
// }详细文档:时间处理工具
类型定义
请求配置
typescript
interface RequestConfig {
baseURL?: string
timeout?: number
headers?: Record<string, string>
// ... 其他 axios 配置
}响应数据
typescript
interface ApiResponse<T = any> {
data: T
status: number
statusText: string
headers: Record<string, string>
config: RequestConfig
}装饰器选项
typescript
interface ConnectStrawPlusOptions {
baseURL?: string
timeout?: number
headers?: Record<string, string>
debounce?: number | DebounceOptions
miniprogram?: boolean
// ... 其他配置
}
interface DebounceOptions {
wait: number
immediate?: boolean
}错误处理
请求错误
typescript
try {
const response = await api.get('/users')
} catch (error) {
if (error.response) {
// 服务器响应错误
console.log(error.response.status)
console.log(error.response.data)
} else if (error.request) {
// 请求发送失败
console.log('请求发送失败')
} else {
// 其他错误
console.log('Error:', error.message)
}
}工具函数错误
typescript
// 工具函数通常会返回默认值而不是抛出错误
try {
const result = splitTime({ time: 'invalid-time' })
// 可能会返回默认的时间差对象
} catch (error) {
console.error('时间计算失败:', error)
}使用示例
完整示例
typescript
import { StrawApi, encryption, splitArray, deepClone, splitTime } from 'strap-trousers'
// 创建 API 实例
const api = StrawApi({
baseURL: 'https://api.example.com',
timeout: 5000,
headers: {
'Content-Type': 'application/json'
}
})
// 获取用户数据并处理
async function getAndProcessUsers() {
try {
// 获取用户数据
const response = await api.get('/users', { page: 1, limit: 100 })
const users = response.data
// 深拷贝数据
const processedUsers = deepClone(users)
// 分批处理
const batches = splitArray(processedUsers, 20)
// 处理每批数据
for (const batch of batches) {
// 加密敏感信息
const encryptedBatch = batch.map(user => ({
...user,
email: encryption(user.email)
}))
// 发送到处理服务
await api.post('/process-users', encryptedBatch)
}
// 记录处理时间
const processTime = splitTime({
time: Date.now() - 3600000, // 1小时前
fillWithZeros: true
})
console.log(`处理完成,用时: ${processTime.hour}:${processTime.minute}:${processTime.second}`)
} catch (error) {
console.error('处理失败:', error)
}
}
// 执行\getAndProcessUsers()