官方 FormKit 包之间共享的常用实用函数。
您可以通过 npm install @formkit/utils
或 yarn add @formkit/utils
来添加此包。
执行递归的 Object.assign
类似操作。
assignDeep<A extends Record<PropertyKey, any>, B extends Record<PropertyKey, any>>(a: A, b: B): A & B;
a
— 要分配的对象。b
— 从中获取值的对象。A & B
将 kebab-case 转换为 camelCase。仅从 kebab 转换为 camel。
camel(str: string): string;
str
— 要转换为驼峰命名的字符串。string
对给定对象执行递归克隆。仅适用于数组和 POJO 等简单对象。
clone<T extends Record<string, unknown> | unknown[] | null>(obj: T, explicit?: string[]): T;
obj
— 要克隆的对象。explicit
可选 — 要显式克隆的项的数组。T
克隆任何内容。如果项目是标量值,则不会有问题,它会将其返回。如果是对象,则执行(快速/宽松)克隆操作。
cloneAny<T>(obj: T): T;
obj
— 要克隆的值。T
给定两个数组,返回一个合并后的数组,其中不包含重复项。
dedupe<T extends any[] | Set<any>, X extends any[] | Set<any>>(arr1: T, arr2?: X): any[];
arr1
— 第一个数组。arr2
可选 — 第二个数组。any[]
确定一个值是否为空。
empty(value: any): boolean;
value
— 要检查是否为空的值。boolean
比较两个值是否相等,可选择深度比较。
eq(valA: any, valB: any, deep?: boolean, explicit?: string[]): boolean;
valA
— 第一个值。valB
— 第二个值。deep
可选 — 如果是对象,则是否进行深度比较。explicit
可选 — 要显式检查的键的数组。boolean
将字符串转义为正则表达式中使用的字符串。
escapeExp(string: string): string;
string
— 要转义的字符串。string
返回一个新的(浅层)对象,其中不包含任何所需的属性。
except(obj: Record<string, any>, toRemove: Array<string | RegExp>): Record<string, any>;
obj
— 起始对象。toRemove
— 要删除的属性的数组。接受字符串或正则表达式。Record<string, any>
递归地将数据从 additional 合并到 original 中,返回一个新对象。
extend(original: Record<string, any>, additional: Record<string, any> | string | null, extendArrays?: boolean, ignoreUndefined?: boolean): Record<string, any> | string | null;
original
— 原始数组。additional
— 要合并的数组。extendArrays
可选 — 如果要扩展/连接数组值而不是替换它们。ignoreUndefined
可选 — 如果要保留原始对象中的值,即使 additional 对象将这些值设置为 undefined。Record<string, any> | string | null
通过点表示法获取特定值。
getAt(obj: any, addr: string): unknown;
obj
— 要从中获取数据的对象。addr
— 以点表示法的 "地址"。unknown
检查给定对象上是否存在给定属性。
has(obj: {
[index: string]: any;
[index: number]: any;
}, property: string | symbol | number): boolean;
obj
— 要检查的对象。property
— 要检查的属性。boolean
将对象定义为初始值。
init<T extends object>(obj: T): T & {
__init?: true;
};
obj
— 要添加初始值的对象。T & { __init?: true }
检查对象是否为简单数组或记录。
isObject(o: unknown): o is Record<PropertyKey, unknown> | unknown[];
o
— 要检查的值。boolean
尝试确定一个对象是否是 POJO(Plain Old JavaScript Object,纯粹的旧 JavaScript 对象)。大部分代码来自 is-plain-object: https://github.com/jonschlinkert/is-plain-object 版权所有 (c) 2014-2017, Jon Schlinkert。
isPojo(o: any): o is Record<string, any>;
o
— 要检查的值。boolean
确定给定的字符串是否完全被引号包围。
isQuotedString(str: string): boolean;
str
— 要检查的字符串。boolean
hello - false
"hello" - true
'world' - true
"hello"=="world" - false
"hello'this'" - false
"hello"'there' - false
"hello""there" - false
'hello === world' - true
确定一个对象是否是对象。
isRecord(o: unknown): o is Record<PropertyKey, unknown>;
o
— 要检查的值。boolean
将驼峰命名转换为 kebab 命名。仅从驼峰转换为 kebab。
kebab(str: string): string;
str
— 要转换为 kebab 命名的字符串。string
从一个对象中过滤掉不应被视为核心节点的 "props" 值,如 "value" 和 "name"。
nodeProps(...sets: Array<Record<string, any>>): Record<string, any>;
sets
— 要过滤值的数组。Record<string, any>
根据 FormKit 输入类型返回正确的小写类型。
nodeType(type: string): 'list' | 'group' | 'input';
type
— 要检查正确类型的字符串。'list' | 'group' | 'input'
给定一个函数,每个调用栈只会调用一次。其他所有调用都将被丢弃。
oncePerTick<T extends CallableFunction>(fn: T): T;
fn
— 每个调用栈只会调用一次的函数。从给定对象中提取一组键。重要的是,即使这些值在原始对象上没有设置,它们也会被提取出来 —— 它们只是具有 undefined 值。
only(obj: Record<string, any>, include: Array<string | RegExp>): Record<string, any>;
obj
— 要从中获取值的对象。include
— 要获取的项的数组。Record<string, any>
解析逗号分隔的参数字符串。
parseArgs(str: string): string[];
str
— 要解析参数的字符串。string[]
根据字符串日期格式返回匹配的正则表达式。
regexForFormat(format: string): RegExp;
format
— 要转换为正则表达式的字符串。RegExp
regexForFormat('MM') // 返回 '(0[1-9]|1[012])'
删除额外的转义字符。
rmEscapes(str: string): string;
str
— 要从中删除额外转义字符的字符串。string
创建指定类型的新集合,并使用数组或现有集合中的值。
setify<T>(items: Set<T> | T[] | null | undefined): Set<T>;
items
— 数组或集合。Set<T>
import { setify } from '@formkit/utils'
const tk = setify(['a', 'b'])
// Set(2) {'a', 'b'}
浅克隆给定的对象。
shallowClone<T>(obj: T, explicit?: string[]): T;
obj
— 要浅克隆的对象。explicit
可选 — 要显式克隆的键的数组。T
将任何字符串转换为 URL/DOM 安全字符串。
slugify(str: string): string;
str
— 要转换为 URL 安全字符串的字符串。string
展开对象或数组,否则返回相同的值。
spread<T>(obj: T, explicit?: string[]): T;
obj
— 要展开的对象。explicit
可选 — 要显式展开的项目数组。T
生成一个随机字符串。
token(): string;
字符串
import { token } from '@formkit/utils'
const tk = token()
// 'jkbyqnphqm'
确定一个属性的值是存在(true)还是不存在(undefined)。例如,属性 disabled 应该通过存在来禁用,但如果它被设置为字符串 "false" — 那么它就不应该被禁用。
undefine(value: unknown): true | undefined;
value
— 要检查是否为 undefined 的值。true | undefined
使用全局变异观察器等待给定的元素出现在 DOM 中。
whenAvailable(childId: string, callback: (el: Element) => void): void;
childId
— 子节点的 id。callback
— 当找到子节点时要调用的回调函数。可用于日期格式化的日期令牌字符串。
type FormKitDateTokens = 'MM' | 'M' | 'DD' | 'D' | 'YYYY' | 'YY';