跳到主要内容

通用工具与颜色辅助函数

颜色能力

基于 colord 构建(附带 namesmixlab 插件)。

导出签名描述
isValidColor(color: AnyColor) => boolean颜色字符串/对象是否可解析。
toHexColor(color: AnyColor) => string转换为 "#rrggbb"
toRgbColor(color: AnyColor) => RgbaColor转换为 { r, g, b, a }
toHslColor(color: AnyColor) => HslaColor转换为 { h, s, l, a }
toHsvColor(color: AnyColor) => HsvaColor转换为 { h, s, v, a }
getColorDifference(firstColor: AnyColor, secondColor: AnyColor) => number两个颜色之间的 Delta E 距离(数值越小越相近)。
convertHslToHex(hslColor: HslColor) => string将 HSL 对象转换为十六进制。
setColorAlpha(color: AnyColor, alphaValue: number) => string返回设置了 alpha 通道后的 color(以十六进制输出)。
mixColor(baseColor: AnyColor, blendColor: AnyColor, blendRatio: number) => string混合两种颜色(blendRatio 为 0 时纯基色,为 1 时纯混合色)。
convertTransparentToOpaque(color: AnyColor, alphaValue: number, backgroundColor?: string) => string将半透明颜色叠加到背景色上(默认背景色为 "#ffffff"),得到等效的不透明十六进制颜色。
isWhiteColor(color: AnyColor) => boolean颜色是否恰好为白色。
getColorName(color: string) => string从内置 colorEntries 表中查找最接近的命名颜色(先精确匹配,再按 RGB+HSL 距离)。
getColorPalette(color: string) => Map<ColorNumber, string>生成(并缓存,最多 100 条)一套与 color 的色相/饱和度匹配的完整 50950 色阶,以最接近的内置 colorPalettes 色系为锚点。

数据常量

导出类型描述
colorEntriesColorEntry[]支撑 getColorName[hex, name] 查找表。
colorNameMapMap<string, string>以十六进制值为索引的 colorEntries,用于精确匹配查找。
colorPalettesColorPalette[]内置的参考色系(RedOrange 等),getColorPalette 会据此适配任意输入颜色。
colorPaletteMapMap<PresetColor, Map<ColorNumber, string>>按 kebab-case 色系名称、再按色板编号索引的 colorPalettes,可直接查找而无需重新生成色系。

函数与任务工具

导出签名描述
AwaitableFnInvocationOptions<TResult, TContext>{ onInvoke?; onSuccess?; onError?; onFinally? }invokeAwaitableFn 接受的生命周期钩子。
isAsyncFunction(fn: Function) => fn is (...args: any[]) => Promise<any>函数是否为 async(或异步生成器)。
invokeAwaitableFn<TArgs, TResult, TContext>(fn, args: TArgs, options: AwaitableFnInvocationOptions<TResult, TContext>) => Promise<TResult>调用 fn(...args) 并在其前后运行 onInvoke / onSuccess / onError / onFinally 钩子;同步(非 Promise)返回值会完全跳过这些钩子。
identity<T>(value: T) => T原样返回其参数。
createThrowNotImplementedFn(feature?: string) => () => never构建一个调用时抛出「未实现」错误的函数。
throwNotImplemented(feature?: string) => never立即抛出「未实现」错误。
generateId() => string返回一个 16 字符的 cuid2 id。一旦 FingerprintJS 解析完成(异步、仅浏览器端),会带上从设备派生的指纹值;在此之前以及在非浏览器/测试环境中回退为固定指纹。
scheduleMicrotask(task: () => void) => void在微任务队列上运行 task(使用 queueMicrotask,不可用时回退到 Promise.resolve().then)。

缓存

导出签名描述
lru<T = any>(max?: number, ttl?: number, resetTTL?: boolean) => LRU<T>(来自 tiny-lru用于创建 O(1) LRU 缓存的工厂函数(默认 max: 1000ttl: 0 表示不过期)。内部被 getColorPalette 使用。
LRU<T = any>class LRU<T> { get, set, has, delete, clear, keys, values, entries, … }(来自 tiny-lrulru() 所构造的缓存类;直接构造它会跳过 lru() 的参数校验。

字符串大小写与模板工具

导出签名描述
constantCase(value: string) => string转换为 CONSTANT_CASE(通过 snakeCase(value).toUpperCase() 实现)。
stringify(value: unknown, emptyForNullish?: boolean) => string将任意值转换为可显示的字符串;默认情况下(emptyForNullish: truenull/undefined 变为 "",为 false 时则变为字面量 "null"/"undefined"。对象回退到 JSON.stringify,若其抛出异常则回退到 String(value)

lib.ts 中的通用工具

该模块从 radashi(Radash 的一个分支)中重新导出部分工具,外加少量直接重新导出的项(cloneDeep 来自 klonadecodeQueryString/encodeQueryString 来自 qs),统一汇总在此处。

类型判断函数

除非另有说明,均为 (value: unknown) => value is T

导出描述
isArray是否为数组。
isBigInt是否为 bigint
isBoolean是否为 boolean
isDate是否为 Date
isEmpty(value: unknown) => boolean —— 是否为空数组/字符串/对象/Map/Set/nullish 值。
isError是否为 Error
isFloat是否为非整数 number
isFunction是否为 Function
isInt是否为整数 numberNumber.isInteger 的窄类型版本)。
isIntString是否为可与整数相互转换的字符串,例如 "0"
isMap是否为 Map
isNullish是否为 null | undefined
isNumber是否为 number
isObject是否为任意非基本类型的 object
isPlainObject是否为纯 {} 风格对象(排除类实例、数组、Map/Set 等)。
isPrimitive(value: unknown) => boolean —— 是否为任意 JS 基本类型值。
isPromise是否为 PromiseLike<unknown>
isRegExp是否为 RegExp
isSet是否为 Set
isString是否为 string
isSymbol是否为 symbol
isUndefined是否为 undefined
isWeakMap是否为 WeakMap
isWeakSet是否为 WeakSet

对象工具

导出签名描述
assign<TInitial, TOverride>(initial: TInitial, override: TOverride) => Assign<TInitial, TOverride>override 递归合并到 initial 上(纯对象深度合并,其他值直接替换)。
get<TDefault = unknown>(value: any, path: string, defaultValue?: TDefault) => TDefault从嵌套对象中读取一个点分路径,例如 get(obj, "a.b.0.c")
omit<T, TKeys extends keyof T>(obj: T, keys: readonly TKeys[]) => Omit<T, TKeys>返回去掉指定键的浅拷贝。
pick<T extends object, F>(obj: T, filter: F) => Pick<T, …>返回仅包含指定键(或经键过滤谓词筛选)的浅拷贝。
set<T extends object, K>(initial: T, path: string, value: K) => T返回将点分路径 path 设置为 value 后的 initial 副本。
cloneDeep<T>(value: T) => T(来自 klona深拷贝一个值(对象、数组、DateRegExpMapSet)。

集合工具

导出签名描述
first<TArray, TDefault = undefined>(array: TArray, defaultValue?: TDefault) => …第一个元素,为空时返回 defaultValue
last<TArray, TDefault = undefined>(array: TArray, defaultValue?: TDefault) => …最后一个元素,为空时返回 defaultValue
max(array: readonly number[]) => number | null,或 <T>(array: readonly T[], getter: (item: T) => number) => T最大的数字,或 getter() 返回值最大的元素。
min(array: readonly number[]) => number | null,或 <T>(array: readonly T[], getter: (item: T) => number) => T最小的数字,或 getter() 返回值最小的元素。
sum(array: readonly number[]) => number,或 <T>(array: readonly T[], fn: (item: T) => number) => number数字之和,或每项 fn(item) 的和。
unique<T, K = T>(array: readonly T[], toKey?: (item: T) => K) => T[]去重后的数组,按值或按派生键去重。
cluster<T, Size extends number = 2>(array: readonly T[], size?: Size) => T[][]arraysize(默认 2)分组切块。

命名工具

导出签名描述
camelCase(str: string) => string转换为 camelCase
kebabCase(str: string) => string转换为 kebab-case
pascalCase(str: string) => string转换为 PascalCase
snakeCase(str: string, options?) => string转换为 snake_case
capitalize(str: string) => string首字母大写。
trim(str: string | null | undefined, charsToTrim?: string) => string去除空白字符,或去除指定的字符集合。
template(str: string, data: Record<string, any>, regex?: RegExp) => stringdata 中的值插值 {{key}} 风格的占位符(可选自定义占位符 regex)。
similarity(str1: string, str2: string) => number两个字符串之间的相似度分值。

限流与记忆化

导出签名描述
debounce<TArgs extends any[]>({ delay, leading }, func: (...args: TArgs) => any) => DebounceFunction<TArgs>.cancel() / .flush() / .isPending() 的防抖包装函数。
throttle<TArgs extends any[]>({ interval, trailing }, func: (...args: TArgs) => any) => ThrottledFunction<TArgs>节流包装函数。
memoize<TArgs, TResult>(func: (...args: TArgs) => TResult, options?: MemoOptions<TArgs>) => (...args: TArgs) => TResult按参数列表缓存 func 的结果。
once<Args, Return, This>(fn: (this: This, ...args: Args) => Return) => (this: This, ...args: Args) => Returnfn 最多运行一次;后续调用返回首次调用的结果。
noop() => undefined不执行任何操作。

数值转换

导出签名描述
toFloat(value: unknown) => number,或 <T>(value: unknown, defaultValue: T) => number | T解析为浮点数,无法解析时返回 defaultValue
toInt(value: unknown) => number,或 <T>(value: unknown, defaultValue: T) => number | T解析为整数,无法解析时返回 defaultValue

查询字符串工具

导出签名描述
decodeQueryString(str: string) => objectqs.parse将查询字符串解析为嵌套对象。
encodeQueryString(obj: object) => stringqs.stringify将对象序列化为查询字符串。

常量与占位函数

导出签名描述
always<T>(value: T) => () => T构建一个始终返回 value 的函数。
alwaysTrue() => truealways(true)
alwaysFalse() => falsealways(false)