---
name: shared
description: 前端通用工具函数库，包含类型判断、日期、数字、字符串、防抖节流等多种常用工具函数 / A collection of utility functions for frontend development
author: allkit
category: utilities
---

# @allkit/shared

前端通用工具函数库，解决常见的开发问题。Provide a collection of utility functions for frontend development.

## Install / 安装

```bash
pnpm add @allkit/shared
```

## Functions / 函数

### 类型判断 (is)

类型判断工具函数 / Type checking utility functions

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [is](./references/is.md) | General type checking | 通用类型判断 |
| [isDef](./references/is.md#isdef) | Check if not undefined | 判断不是 undefined |
| [isUnDef](./references/is.md#isundef) | Check if undefined | 判断是 undefined |
| [isObject](./references/is.md#isobject) | Check if is Object (includes Array, Map) | 判断是 Object（含数组、Map） |
| [isPlainObject](./references/is.md#isplainobject) | Check if is plain Object | 判断是原始 Object（不含数组） |
| [isEmpty](./references/is.md#isempty) | Check if is empty | 判断是空（含空数组、空对象、空 Map） |
| [isEmptyValue](./references/is.md#isemptyvalue) | Check if is empty value | 检测是否空值 |
| [isDate](./references/is.md#isdate) | Check if is Date object | 判断是日期对象 |
| [isNullOrUnDef](./references/is.md#isnullorundef) | Check if is null or undefined | 判断是 null 或 undefined |
| [isNumber](./references/is.md#isnumber) | Check if is number | 是否是 number |
| [isInteger](./references/is.md#isinteger) | Check if is integer | 判断是否为整数 |
| [isNumeric](./references/is.md#isnumeric) | Check if is numeric | 判断是否为数值 |
| [isPromise](./references/is.md#ispromise) | Check if is Promise | 是否是 Promise |
| [isFunction](./references/is.md#isfunction) | Check if is function | 是否是函数 |
| [isArray](./references/is.md#isarray) | Check if is array | 是否是数组 |
| [isUrl](./references/is.md#isurl) | Check if is URL | 是否是 URL |
| [isWindow](./references/is.md#iswindow) | Check if is Window | 是否是 Window |
| [isMap](./references/is.md#ismap) | Check if is Map | 是否是 Map |
| [isRegExp](./references/is.md#isregexp) | Check if is RegExp | 是否是正则 |

### 日期处理 (date)

日期处理工具函数，基于 dayjs / Date handling utilities based on dayjs

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [useDate](./references/date.md#usedate) | Get dayjs instance | 使用 dayjs 实例 |
| [dateFormat](./references/date.md#dateformat) | Format date to string | 日期转格式字符串 |
| [minute](./references/date.md#minute) | Get current time (default to minute) | 返回当前时间（默认到分钟） |
| [dateMonthDays](./references/date.md#datemonthdays) | Get days in month | 返回日期对应月份天数 |
| [getCurrDate](./references/date.md#getcurrdate) | Get date before/after i days | 返回前后 i 天的日期字符串 |
| [dateDiff](./references/date.md#datediff) | Get date difference | 返回两个日期时间差 |
| [dateFromNow](./references/date.md#datefromnow) | Relative time display | 相对时间显示 |
| [dateDiffFormat](./references/date.md#datediffformat) | Date difference in natural units | 计算两个日期之间的差值 |
| [durationFormat](./references/date.md#durationformat) | Format duration | 格式化时长 |
| [durationFormatNoZero](./references/date.md#durationformatnozero) | Format duration without zero | 格式化时长（去掉 0） |

### 字符串操作 (string)

字符串操作工具函数 / String manipulation utilities

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [camelize](./references/string.md#camelize) | Kebab to camelCase | 中划线转小驼峰 |
| [kebabCase](./references/string.md#kebabcase) | CamelCase to kebab-case | 驼峰转中划线 |
| [snakeCase](./references/string.md#snakecase) | CamelCase to snake_case | 驼峰转下划线 |
| [lowerFirst](./references/string.md#lowerfirst) | First char to lower | 首字母转小写 |
| [upperFirst](./references/string.md#upperfirst) | First char to upper | 首字母转大写 |

### 数字处理 (number)

数字处理工具函数，基于 big.js / Number utilities based on big.js

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [useNumber](./references/number.md#usenumber) | Get Big instance | 返回实例化的 Big 对象 |
| [formatNumber](./references/number.md#formatnumber) | Format number with separator | 格式化数字（千位分隔符） |
| [formatMoney](./references/number.md#formatmoney) | Format money (万/亿) | 格式化金钱（万、亿） |

### 本地存储 (storage)

本地存储工具函数，自动处理 JSON 序列化 / Storage utilities with JSON serialization

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [setLocal](./references/storage.md#setlocal) | Set LocalStorage | 设置 LocalStorage |
| [getLocal](./references/storage.md#getlocal) | Get LocalStorage | 获取 LocalStorage |
| [removeLocal](./references/storage.md#removelocal) | Remove LocalStorage | 删除 LocalStorage |
| [setSession](./references/storage.md#setsession) | Set SessionStorage | 设置 SessionStorage |
| [getSession](./references/storage.md#getsession) | Get SessionStorage | 获取 SessionStorage |
| [removeSession](./references/storage.md#removesession) | Remove SessionStorage | 删除 SessionStorage |

### Lodash 常用函数 (lodash)

Lodash 常用工具函数 / Common Lodash utilities

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [deepClone](./references/lodash.md#deepclone) | Deep clone | 深拷贝 |
| [omit](./references/lodash.md#omit) | Omit fields | 删除对象中的某些键值对 |
| [pick](./references/lodash.md#pick) | Pick fields | 从对象中取出指定的键值对 |
| [debounce](./references/lodash.md#debounce) | Debounce function | 防抖函数 |
| [throttle](./references/lodash.md#throttle) | Throttle function | 节流函数 |
| [uniqueId](./references/lodash.md#uniqueid) | Generate unique ID | 生成浏览器唯一 ID |
| [get](./references/lodash.md#get) | Get value by path | 从对象中获取指定路径的值 |
| [objToQString](./references/lodash.md#objtoqstring) | Object to query string | 对象转 URL 字符串 |
| [qStringToObj](./references/lodash.md#qstringtoobj) | Query string to object | URL 字符串转对象 |
| [blobToBase64](./references/lodash.md#blobtobase64) | Blob to Base64 | Blob 转 Base64 |

### 定时器 (timer)

定时器工具函数 / Timer utilities

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [sleep](./references/timer.md#sleep) | Sleep function | 睡眠函数 |
| [raf](./references/timer.md#raf) | Request animation frame | 监听下一动画帧 |
| [doubleRaf](./references/timer.md#doubleraf) | Double animation frame | 监听双帧动画帧 |

### 设备判断 (device)

设备判断工具函数 / Device detection utilities

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [isIos](./references/device.md#isios) | Check if iOS | 是否是 iOS 客户端 |
| [isAndroid](./references/device.md#isandroid) | Check if Android | 是否是 Android 客户端 |
| [isWeChat](./references/device.md#iswechat) | Check if WeChat | 是否是微信浏览器 |
| [isWxMiniProgram](./references/device.md#iswxminiprogram) | Check if WeChat Mini Program | 是否是微信小程序 |
| [isHarmony](./references/device.md#isharmony) | Check if HarmonyOS | 是否是鸿蒙系统 |
| [getDeviceBrand](./references/device.md#getdevicebrand) | Get device brand | 获取设备厂商 |

### 剪贴板 (clipboard)

剪贴板操作工具函数 / Clipboard utilities

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [copyTextToClipboard](./references/clipboard.md#copytexttoclipboard) | Copy text to clipboard | 复制文本到剪贴板 |

### Cookie 操作 (cookie)

Cookie 操作工具函数 / Cookie utilities

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [getCookie](./references/cookie.md#getcookie) | Get cookie value | 获取 Cookie 值 |
| [setCookie](./references/cookie.md#setcookie) | Set cookie | 设置 Cookie |
| [removeCookie](./references/cookie.md#removecookie) | Remove cookie | 删除 Cookie |

### DOM 元素操作 (element)

DOM 元素操作工具函数 / DOM element utilities

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [getBoundingClientRect](./references/element.md#getboundingclientrect) | Get element rect | 获取元素的位置和尺寸 |
| [addClass](./references/element.md#addclass) | Add CSS class | 添加 CSS 类名 |
| [removeClass](./references/element.md#removeclass) | Remove CSS class | 移除 CSS 类名 |
| [toggleClass](./references/element.md#toggleclass) | Toggle CSS class | 切换 CSS 类名 |

### 深拷贝 (cloneDeep)

深拷贝工具函数 / Deep clone utilities

| Function | Description | 中文说明 |
|----------|-------------|----------|
| [cloneDeep](./references/cloneDeep.md#clonedeep) | Deep clone | 深拷贝 |

## Usage / 使用示例

```ts
import {
  isString, isNumber, isObject, isEmpty, isInteger,
  useDate, dateFormat, dateFromNow, durationFormat,
  camelize, kebabCase, snakeCase,
  useNumber, formatNumber, formatMoney,
  setLocal, getLocal, setSession, getSession,
  deepClone, omit, pick, debounce, throttle, uniqueId,
  sleep, raf, doubleRaf,
  isIos, isAndroid, isWeChat, getDeviceBrand,
  copyTextToClipboard
} from '@allkit/shared'

// 类型判断 / Type checking
isString('hello')           // true
isNumber(123)               // true
isObject({ name: 1 })       // true
isEmpty([])                 // true
isInteger('123')            // true

// 日期处理 / Date handling
useDate().format('YYYY-MM-DD HH:mm:ss')
dateFormat(new Date(), 'YYYY-MM-DD')
dateFromNow('2024-03-02 00:00')
durationFormat(61, { unit: 'm' })

// 字符串操作 / String manipulation
camelize('user-info')       // 'userInfo'
kebabCase('userInfo')       // 'user-info'
snakeCase('userInfo')       // 'user_info'

// 数字处理 / Number handling
useNumber('1').add('2').toNumber()      // 3
formatNumber(1234567)                    // '1,234,567'
formatMoney(1234567)                    // '123万4567'

// 本地存储 / Storage
setLocal('token', '123')
const token = getLocal<string>('token')
setSession('userInfo', { name: '张三' })
const userInfo = getSession<{ name: string }>('userInfo')

// Lodash 常用函数 / Lodash utilities
deepClone({ name: 'a', person: { age: 18 } })
omit({ a: 1, b: 2, c: 3 }, ['a'])      // { b: 2, c: 3 }
pick({ a: 1, b: 2, c: 3 }, ['a', 'b']) // { a: 1, b: 2 }
debounce(fn, 300)
throttle(fn, 100)
uniqueId()                             // 16 位

// 定时器 / Timer
await sleep(1000)
await raf()
await doubleRaf()

// 设备判断 / Device detection
isIos()                                // boolean
isAndroid()                            // boolean
isWeChat()                             // boolean
getDeviceBrand()                       // EnumDeviceBrand

// 剪贴板 / Clipboard
copyTextToClipboard('hello')          // boolean
```
