Variable default

default: {
    bufferToHex: ((buffer: ArrayBuffer) => string);
    camelToSnake: ((str: string) => string);
    capitalize: ((str: string) => string);
    convertToUpperCase: ((str: string) => string);
    currenMonthUID: (() => string);
    debounce: (<T>(fn: T, delay: number, immediate??: boolean) => ((...args: Parameters<T>) => void) & {
        cancel: (() => void);
    });
    difference: (<T>(arr1: T[], arr2: T[]) => T[]);
    flattenArray: (<T>(array: (T | T[])[]) => T[]);
    formatDate: ((timestamp: string | number | Date, format??: string) => string);
    formatTimeZoneOffset: (() => string);
    formatWithTimezone: ((dateInput??: string | number | Date, timezone??: string, locale??: string) => string);
    generateSignature: ((secretKey??: string) => Promise<{
        nonce: string;
        signature: string;
        timestamp: number;
    }>);
    generateUID: (() => string);
    genRanHex: ((size: number) => string);
    intersection: (<T>(arr1: T[], arr2: T[]) => T[]);
    isMobile: (() => boolean);
    kebabCase: ((str: string) => string);
    padZero: ((num: string | number) => string);
    queryParams: ((key: string) => null | string);
    randomString: ((length: number) => string);
    snakeToCamel: ((str: string) => string);
    sortArray: (<T>(array: T[], compareFn?: ((a: T, b: T) => number)) => T[]);
    strToUint8Array: ((str: string) => Uint8Array);
    throttle: (<T>(fn: T, limit: number) => ((...args: Parameters<T>) => void));
    timezoneToRegionMap: Record<string, string>;
    uniqueArray: (<T>(array: T[]) => T[]);
    getRegionFromTimezone(timezone: string): string;
    isEqual(a: any, b: any): boolean;
    replaceImgTagsWithSpans(html: string): string;
    resolveFileMimeType(file: File): string;
    updateQueryParams(key: string | Record<string,
        | undefined
        | null
        | string
        | number>, value?: null | string | number): string;
}

Type declaration

  • bufferToHex: ((buffer: ArrayBuffer) => string)

    将 ArrayBuffer 转换为十六进制字符串

    const buffer = new Uint8Array([1, 2, 3]).buffer;
    const hex = bufferToHex(buffer);
    console.log(hex); // 可能输出 "010203"
      • (buffer): string
      • Parameters

        • buffer: ArrayBuffer

          需要转换的 ArrayBuffer

        Returns string

        转换后的十六进制字符串

  • camelToSnake: ((str: string) => string)

    将驼峰字符串转换为下划线格式

    const result = camelToSnake('camelCaseString')
    console.log(result) // 输出 "camel_case_string"
      • (str): string
      • Parameters

        • str: string

          输入字符串

        Returns string

        转换后的下划线字符串

  • capitalize: ((str: string) => string)

    将字符串首字母大写

    返回首字母大写后的字符串。

    const result = capitalize('hello')
    console.log(result) // 输出 "Hello"
      • (str): string
      • Parameters

        • str: string

          输入字符串

        Returns string

        首字母大写后的字符串

  • convertToUpperCase: ((str: string) => string)

    将整个字符串转换为大写

    将输入字符串中的所有字符转换为大写形式。

    const result = convertToUpperCase("hello");
    console.log(result); // 输出 "HELLO"
      • (str): string
      • Parameters

        • str: string

          输入的字符串

        Returns string

        转换后的大写字符串

  • currenMonthUID: (() => string)

    生成唯一标识符 (UID)

    生成格式为 yyyymm + 6位随机字母和数字 的唯一标识符。

    yyyymm 表示当前的年份和月份,6位随机字母和数字 是通过哈希随机生成的。

    const uid = currenMonthUID();
    console.log(uid); // 输出类似 "202411a1b2c3"
      • (): string
      • Returns string

        生成的 UID 字符串

  • debounce: (<T>(fn: T, delay: number, immediate??: boolean) => ((...args: Parameters<T>) => void) & {
        cancel: (() => void);
    })

    防抖函数

    创建一个防抖包装器,在指定时间内多次调用时,仅执行最后一次, 可选 immediate 选项,使第一次调用立即执行。

    const log = debounce(() => console.log("Executed"), 300);
    window.addEventListener("resize", log); // 300ms 内重复触发时,仅最后一次执行
    const logImmediate = debounce(() => console.log("Immediate Execution"), 300, true);
    logImmediate(); // 立即执行一次,后续调用仍需等待 300ms
    const debouncedFn = debounce(() => console.log("Will not execute"), 500);
    debouncedFn();
    debouncedFn.cancel(); // 取消执行
      • <T>(fn, delay, immediate?): ((...args: Parameters<T>) => void) & {
            cancel: (() => void);
        }
      • Type Parameters

        • T extends ((...args: any[]) => void)

          目标函数的类型

        Parameters

        • fn: T

          需要防抖处理的函数

        • delay: number

          推迟执行的等待时间(毫秒)

        • Optionalimmediate: boolean = false

          是否在第一次调用时立即执行

        Returns ((...args: Parameters<T>) => void) & {
            cancel: (() => void);
        }

        防抖后的函数,并附带 cancel 方法可手动取消防抖

  • difference: (<T>(arr1: T[], arr2: T[]) => T[])

    获取数组的差集

    返回 arr1 中存在但 arr2 中不存在的元素。

    const array1 = [1, 2, 3, 4]
    const array2 = [3, 4, 5, 6]
    const result = difference(array1, array2)
    console.log(result) // 输出 [1, 2]
      • <T>(arr1, arr2): T[]
      • Type Parameters

        • T

        Parameters

        • arr1: T[]

          数组1

        • arr2: T[]

          数组2

        Returns T[]

        差集数组

  • flattenArray: (<T>(array: (T | T[])[]) => T[])

    数组扁平化

    使用递归方法将嵌套的数组扁平化为单层数组。

    const nestedArray = [1, [2, [3, [4]], 5]];
    const flatArray = flattenArray(nestedArray);
    console.log(flatArray); // 输出 [1, 2, 3, 4, 5]
    const simpleArray = [1, 2, 3];
    const flatArray = flattenArray(simpleArray);
    console.log(flatArray); // 输出 [1, 2, 3]
      • <T>(array): T[]
      • Type Parameters

        • T

        Parameters

        • array: (T | T[])[]

          需要扁平化的数组,可以包含嵌套数组。

        Returns T[]

        扁平化后的单层数组

  • formatDate: ((timestamp: string | number | Date, format??: string) => string)

    按指定格式格式化时间

    支持传入时间戳、日期字符串或 Date 对象,并根据格式模板输出字符串。

    如果输入的时间无效,会抛出错误

    formatDate(1714298400000);
    // 输出 "2025-04-28 18:00:00"
    formatDate("2025-04-28T10:00:00Z", "yyyy/MM/dd");
    // 输出 "2025/04/28"
    formatDate(new Date(), "HH:mm:ss");
    // 输出 "18:00:00"
      • (timestamp, format?): string
      • Parameters

        • timestamp: string | number | Date

          要格式化的时间,可以是字符串、时间戳或 Date 实例

        • Optionalformat: string = 'yyyy-MM-dd HH:mm:ss'

          格式化模板,支持的占位符包括: yyyy, yy, MM, M, dd, d, HH, H, hh, h, mm, m, ss, s

        Returns string

        格式化后的时间字符串

  • formatTimeZoneOffset: (() => string)

    格式化时区偏移

    获取当前设备的时区偏移,并以 UTC±hh:mm 格式返回。

    const timeZone = formatTimeZoneOffset();
    console.log(timeZone); // 输出类似 "UTC+08:00" 或 "UTC-05:00"
      • (): string
      • Returns string

        格式化后的时区偏移字符串

  • formatWithTimezone: ((dateInput??: string | number | Date, timezone??: string, locale??: string) => string)

    将日期格式化为指定时区的本地时间字符串

    接收一个日期值、目标时区和语言环境(locale),将其格式化为 yyyy-MM-dd HH:mm:ss 字符串。 所有参数都是可选的,默认格式为当前时间 + 中国时区(Asia/Shanghai)+ 中文格式(zh-CN)。

    如果提供了无效的时间或时区,将抛出错误

    formatWithTimezone(); 
    // 当前时间 + Asia/Shanghai + zh-CN 输出: "2025-04-16 15:00:00"
    formatWithTimezone("2025-04-16T06:00:00Z", "UTC", "en-US");
    // 输出: "2025-04-16 06:00:00"
      • (dateInput?, timezone?, locale?): string
      • Parameters

        • OptionaldateInput: string | number | Date = ...

          要格式化的时间(字符串、时间戳或 Date 对象)

        • Optionaltimezone: string = 'Asia/Shanghai'

          时区名称(例如 "UTC", "Asia/Shanghai", "America/New_York")

        • Optionallocale: string = 'zh-CN'

          语言区域设置,默认使用中文格式

        Returns string

        格式化后的时间字符串,格式为 yyyy-MM-dd HH:mm:ss

  • generateSignature: ((secretKey??: string) => Promise<{
        nonce: string;
        signature: string;
        timestamp: number;
    }>)

    浏览器环境下生成 HMAC-SHA256 签名

    生成包含 timestampnoncesignature 的签名参数对象。

    const signatureParams = await generateSignature();
    console.log(signatureParams);
    // 输出:
    // {
    // timestamp: 1710772974000, // 13位毫秒时间戳
    // nonce: "a1b2c3d4e5f6g7h8", // 16位随机 hex 字符串
    // signature: "d2e3f9c1b2a4..." // 64位 HMAC-SHA256 签名 hex 字符串
    // }
      • (secretKey?): Promise<{
            nonce: string;
            signature: string;
            timestamp: number;
        }>
      • Parameters

        • OptionalsecretKey: string = 'jmni-until'

          用于签名的密钥

        Returns Promise<{
            nonce: string;
            signature: string;
            timestamp: number;
        }>

        包含 timestamp(时间戳,毫秒级)、nonce(16位随机十六进制字符串)和 signature(HMAC-SHA256 签名字符串)的对象

  • generateUID: (() => string)

    生成全局唯一标识符 (UID)

    使用当前时间戳和随机字符串的组合,确保生成的字符串具有唯一性。

    const uid = generateUID()
    console.log(uid) // 类似 "kxidq52e9xr73mpk"
      • (): string
      • Returns string

        一个由时间戳和随机字符串组成的唯一标识符

  • genRanHex: ((size: number) => string)

    生成随机的十六进制字符串

    const hex = genRanHex(8);
    console.log(hex); // 可能输出 "a3f9c1b2"
      • (size): string
      • Parameters

        • size: number

          生成的十六进制字符串长度

        Returns string

        生成的随机十六进制字符串

  • intersection: (<T>(arr1: T[], arr2: T[]) => T[])

    获取两个数组的交集

    返回两个数组中都存在的元素。

    const array1 = [1, 2, 3, 4]
    const array2 = [3, 4, 5, 6]
    const result = intersection(array1, array2)
    console.log(result) // 输出 [3, 4]
      • <T>(arr1, arr2): T[]
      • Type Parameters

        • T

        Parameters

        • arr1: T[]

          数组1

        • arr2: T[]

          数组2

        Returns T[]

        两数组的交集

  • isMobile: (() => boolean)

    判断是否为移动端设备

    检测用户代理字符串中是否包含常见的移动设备标识,以判断当前环境是否为移动端设备。

    const isMobileDevice = isMobile();
    console.log(isMobileDevice); // 在移动端返回 true,在桌面端返回 false
      • (): boolean
      • Returns boolean

        如果是移动端设备返回 true,否则返回 false

  • kebabCase: ((str: string) => string)

    将字符串转换为 kebab-case

    将输入字符串转换为 kebab-case(以连字符 - 分隔的形式), 处理大小写转换、去除多余的空格或下划线,并规范化连字符的使用。

    const result = kebabCase("HelloWorld");
    console.log(result); // 输出 "hello-world"
    const result = kebabCase("hello world_example");
    console.log(result); // 输出 "hello-world-example"
      • (str): string
      • Parameters

        • str: string

          输入的字符串

        Returns string

        转换后的 kebab-case 字符串

  • padZero: ((num: string | number) => string)

    补全个位数为两位数字

    如果输入的数字是个位数(无论是数字类型还是字符串类型),则在前面补 0; 十位及以上数字保持原样。如果输入为非数字的字符串(如字母),则返回 Invalid Input

    const result1 = padZero(5)
    console.log(result1) // 输出 "05"

    const result2 = padZero("7")
    console.log(result2) // 输出 "07"

    const result3 = padZero(15)
    console.log(result3) // 输出 "15"

    const result4 = padZero("123")
    console.log(result4) // 输出 "123"

    const result5 = padZero("abc")
    console.log(result5) // 输出 "Invalid Input"
      • (num): string
      • Parameters

        • num: string | number

          输入的数字,可以是数字类型或字符串数字

        Returns string

        补全后的两位字符串或错误提示

  • queryParams: ((key: string) => null | string)

    获取 URL 查询参数值

    解析当前页面的查询参数并返回指定参数的值。

    // 假设当前 URL 是 'http://example.com?page=2&size=10'
    const page = queryParams('page')
    console.log(page) // 输出 "2"

    const size = queryParams('size')
    console.log(size) // 输出 "10"

    const nonExistent = queryParams('nonExistent')
    console.log(nonExistent) // 输出 null
      • (key): null | string
      • Parameters

        • key: string

          要获取的查询参数的名称

        Returns null | string

        查询参数的值,如果不存在则返回 null

  • randomString: ((length: number) => string)

    生成随机字符串

    生成指定长度的随机字符串,由数字和字母组成。

    const result = randomString(8)
    console.log(result) // 输出类似 "a1b2c3d4"
      • (length): string
      • Parameters

        • length: number

          字符串长度

        Returns string

        随机字符串

  • snakeToCamel: ((str: string) => string)

    将下划线字符串转换为驼峰格式

    const result = snakeToCamel('snake_case_string')
    console.log(result) // 输出 "snakeCaseString"
      • (str): string
      • Parameters

        • str: string

          输入字符串

        Returns string

        转换后的驼峰字符串

  • sortArray: (<T>(array: T[], compareFn?: ((a: T, b: T) => number)) => T[])

    对数组进行排序

    使用 Array.sort 方法对数组进行升序排序,支持数字和字符串数组的排序。

    const numbers = [5, 3, 8, 1];
    const sortedNumbers = sortArray(numbers);
    console.log(sortedNumbers); // 输出 [1, 3, 5, 8]
    const strings = ["banana", "apple", "orange"];
    const sortedStrings = sortArray(strings);
    console.log(sortedStrings); // 输出 ["apple", "banana", "orange"]
    const customSorted = sortArray([3, 1, 4, 2], (a, b) => b - a);
    console.log(customSorted); // 输出 [4, 3, 2, 1]
      • <T>(array, compareFn?): T[]
      • Type Parameters

        • T

        Parameters

        • array: T[]

          需要排序的数组

        • OptionalcompareFn: ((a: T, b: T) => number)

          可选的比较函数,如果未提供,将进行默认排序。

            • (a, b): number
            • Parameters

              Returns number

        Returns T[]

        排序后的数组

  • strToUint8Array: ((str: string) => Uint8Array)

    将字符串转换为 Uint8Array

    const uint8Array = strToUint8Array("hello");
    console.log(uint8Array); // 输出 Uint8Array(5) [104, 101, 108, 108, 111]
      • (str): Uint8Array
      • Parameters

        • str: string

          需要转换的字符串

        Returns Uint8Array

        转换后的 Uint8Array

  • throttle: (<T>(fn: T, limit: number) => ((...args: Parameters<T>) => void))

    节流函数

    限制函数在指定时间间隔内只能执行一次。

    const throttledFn = throttle(() => console.log('Throttled!'), 1000)
    window.addEventListener('scroll', throttledFn)
      • <T>(fn, limit): ((...args: Parameters<T>) => void)
      • Type Parameters

        • T extends ((...args: any[]) => void)

        Parameters

        • fn: T

          要执行的函数

        • limit: number

          节流时间间隔(毫秒)

        Returns ((...args: Parameters<T>) => void)

        节流后的函数

          • (...args): void
          • Parameters

            • Rest...args: Parameters<T>

            Returns void

  • timezoneToRegionMap: Record<string, string>

    时区到地区中文名称映射表

  • uniqueArray: (<T>(array: T[]) => T[])

    数组去重

    使用 Array.reduce 方法实现数组去重,保留数组中第一次出现的唯一值。

    const numbers = [1, 2, 2, 3, 4, 4, 5];
    const uniqueNumbers = uniqueArray(numbers);
    console.log(uniqueNumbers); // 输出 [1, 2, 3, 4, 5]
    const strings = ["apple", "banana", "apple", "orange"];
    const uniqueStrings = uniqueArray(strings);
    console.log(uniqueStrings); // 输出 ["apple", "banana", "orange"]
      • <T>(array): T[]
      • Type Parameters

        • T

        Parameters

        • array: T[]

          需要去重的数组

        Returns T[]

        去重后的新数组

  • getRegionFromTimezone:function
    • 根据时区字符串返回对应地区中文名称

      Parameters

      • timezone: string

        IANA 时区标识符(如 "Asia/Shanghai")

      Returns string

      对应的中文地区名称,找不到时返回原始时区字符串

      如果输入为空或不是字符串,则抛出异常

      getRegionFromTimezone("Asia/Tokyo"); // 返回 "日本"
      getRegionFromTimezone("Europe/Paris"); // 返回 "法国"
      getRegionFromTimezone("Unknown/Timezone"); // 返回 "Unknown/Timezone"
  • isEqual:function
    • 深度比较两个值是否相等(结构 & 值完全一致)

      支持基本类型、对象、数组、NaN、null、undefined,安全可靠。

      Parameters

      • a: any

        比较的第一个值

      • b: any

        比较的第二个值

      Returns boolean

      是否相等

      isEqual({ a: 1 }, { a: 1 }) // true
      isEqual([1, 2], [1, 2]) // true
      isEqual(NaN, NaN) // true
  • replaceImgTagsWithSpans:function
    • 将 HTML 字符串中的 标签转换为自定义占位 标签。

      此函数会查找 HTML 字符串中所有 标签,并将其替换为: <span class="custom-image" data-src="..."></span> 形式。 适用于懒加载、渲染优化或自定义图片组件的场景。

      ⚠️ 仅转换具有 src 属性的 <img> 标签,保留其他属性将被忽略。

      Parameters

      • html: string

        原始 HTML 字符串

      Returns string

      替换后的 HTML 字符串,非字符串或空字符串将原样返回

      replaceImgTagsWithSpans('<p><img src="a.jpg" /></p>');
      // 返回 '<p><span class="custom-image" data-src="a.jpg"></span></p>'
  • resolveFileMimeType:function
    • 获取文件的 MIME 类型:

      • 如果浏览器自动识别了 file.type,直接返回;
      • 否则根据文件扩展名从内部映射表中推断;
      • 若仍无法识别,则返回 'application/octet-stream' 作为默认二进制类型。

      支持常见的压缩包、文档、图片、音视频、字体等类型,增强浏览器识别缺陷下的 MIME 补全能力。

      Parameters

      • file: File

        要检测 MIME 类型的文件对象

      Returns string

      对应的 MIME 类型字符串

      const file = new File(["dummy"], "example.7z");
      const mime = resolveFileMimeType(file); // 'application/x-7z-compressed'
  • updateQueryParams:function
    • 更新当前页面的 URL 查询参数

      支持单个键值对或传入对象进行批量更新,更新后不刷新页面,仅修改地址栏内容。 如果某个参数的值为 undefinednull,该参数将被从 URL 中移除。

      Parameters

      • key: string | Record<string,
            | undefined
            | null
            | string
            | number>

        查询参数的键,或包含多个参数的对象

      • Optionalvalue: null | string | number

        查询参数的值,仅在 key 为字符串时使用

      Returns string

      返回更新后的完整 URL 字符串

      updateQueryParams("page", 2);
      // URL 变为 "...?page=2"
      updateQueryParams({ page: 1, keyword: "test" });
      // URL 变为 "...?page=1&keyword=test"
      updateQueryParams("page", null);
      // 删除 page 参数