在官方FormKit包之间共享的常用实用函数。
您可以通过使用npm install @formkit/utils
或yarn add @formkit/utils
添加此包。
执行递归的Object.assign
-like操作。
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
对给定对象执行递归克隆。仅用于简单对象,如数组和POJOs。
clone<T extends Record<string, unknown> | unknown[] | null>(obj: T, explicit?: string[]): T;
obj
— 要克隆的对象。explicit
可选 — 明确要克隆的项目数组。T
克隆任何东西。如果项目是标量,不用担心,它会返回。如果它是一个对象,它会执行一个(快速/松散)克隆操作。
cloneAny<T>(obj: T): T;
obj
— 要克隆的值。T
给定2个数组,将它们作为一个没有重复的组合数组返回。
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
一个用于测试有效日期字符串的正则表达式。
eqRegExp(x: RegExp, y: RegExp): boolean;
x
— 要比较的RegExp。y
— 要比较的RegExp。为在正则表达式中使用的字符串进行转义。
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
可选 — 即使附加对象将这些值设置为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)。主要来自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(str: string): string;
str
— 需要转换为短横线命名的字符串。string
从对象中过滤出不应被视为核心节点的"props"的值,如"value"和"name"。
nodeProps(...sets: Array<Record<string, any>>): Record<string, any>;
sets
— 需要从中获取过滤值的数组。Record<string, any>
给定一个FormKit输入类型,返回正确的lowerCased()类型。
nodeType(type: string): 'list' | 'group' | 'input';
type
— 需要检查以获取正确类型的字符串'list' | 'group' | 'input'
给定一个函数,每个调用堆栈只会进行一次调用。所有其他的都将被丢弃。
oncePerTick<T extends CallableFunction>(fn: T): T;
fn
— 每个刻度调用一次的函数。从给定对象中提取一组键。重要的是,即使这些值在原始对象上没有设置,这也会提取值 - 它们只会有一个未定义的值。
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的字符串。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;
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, root?: Document | ShadowRoot): void;
childId
— 子节点的 id。callback
— 当找到子节点时调用的回调。root
可选可以用于日期格式化的日期令牌字符串。
export type FormKitDateTokens = 'MM' | 'M' | 'DD' | 'D' | 'YYYY' | 'YY';