Introducing KickStart —  AI generated FormKit forms in seconds. Generate from a screenshot, edit with drag-and-drop or conversational AI, copy & paste as components or schema!
Try for free

@formkit/utils

简介

在官方FormKit包之间共享的常用实用函数。

您可以通过使用npm install @formkit/utilsyarn add @formkit/utils添加此包。

函数

assignDeep()

执行递归的Object.assign -like操作。

签名

assignDeep<A extends Record<PropertyKey, any>, B extends Record<PropertyKey, any>>(a: A, b: B): A & B;

参数

  • a — 要分配的对象。
  • b — 从中获取值的对象。

返回

A & B

camel()

这将kebab-case转换为camelCase。它只从kebab转换为camel。

签名

camel(str: string): string;

参数

  • str — 要转换为驼峰命名的字符串。

返回

string

clone()

对给定对象执行递归克隆。仅用于简单对象,如数组和POJOs。

签名

clone<T extends Record<string, unknown> | unknown[] | null>(obj: T, explicit?: string[]): T;

参数

  • obj — 要克隆的对象。
  • explicit 可选 — 明确要克隆的项目数组。

返回

T

cloneAny()

克隆任何东西。如果项目是标量,不用担心,它会返回。如果它是一个对象,它会执行一个(快速/松散)克隆操作。

签名

cloneAny<T>(obj: T): T;

参数

  • obj — 要克隆的值。

返回

T

dedupe()

给定两个数组,将它们返回为一个没有重复的组合数组。

签名

dedupe<T extends any[] | Set<any>, X extends any[] | Set<any>>(arr1: T, arr2?: X): any[];

参数

  • arr1 — 第一个数组。
  • arr2 可选 — 第二个数组。

返回

any[]

empty()

确定一个值是否为空。

签名

empty(value: any): boolean;

参数

  • value — 要检查是否为空的值。

返回

boolean

eq()

比较两个值是否相等,可选的深度。

签名

eq(valA: any, valB: any, deep?: boolean, explicit?: string[]): boolean;

参数

  • valA — 第一个值。
  • valB — 第二个值。
  • deep 可选 — 如果是对象,是否会深度比较。
  • explicit 可选 — 明确要检查的键的数组。

返回

boolean

eqRegExp()

一个用于测试有效日期字符串的正则表达式。

签名

eqRegExp(x: RegExp, y: RegExp): boolean;

参数

  • x — 要比较的RegExp。
  • y — 要比较的RegExp。

escapeExp()

为在正则表达式中使用的字符串进行转义。

签名

escapeExp(string: string): string;

参数

  • string — 需要转义的字符串。

返回

string

except()

返回一个新的(浅)对象,删除任何不需要的属性。

签名

except(obj: Record<string, any>, toRemove: Array<string | RegExp>): Record<string, any>;

参数

  • obj — 起始对象。
  • toRemove — 要删除的属性数组。接受字符串或正则表达式。

返回

Record<string, any>

extend()

递归地从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,也会保留来自original对象的值。

返回

Record<string, any> | string | null

无副作用

getAt()

通过点表示法获取特定值。

签名

getAt(obj: any, addr: string): unknown;

参数

  • obj — 从中获取数据的对象。
  • addr — 点表示法的"地址"。

返回

unknown

has()

检查给定的属性是否存在于给定的对象上。

签名

has(obj: {
    [index: string]: any;
    [index: number]: any;
}, property: string | symbol | number): boolean;

参数

  • obj — 要检查的对象。
  • property — 要检查的属性。

返回

boolean

init()

定义一个对象作为初始值。

签名

init<T extends object>(obj: T): T & {
    __init?: true;
};

参数

  • obj — 需要添加初始值的对象。

返回

T & { __init?: true }

isObject()

检查一个对象是否是简单的数组或记录。

签名

isObject(o: unknown): o is Record<PropertyKey, unknown> | unknown[];

参数

  • o — 需要检查的值。

返回

boolean

isPojo()

尝试确定一个对象是否是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()

确定给定的字符串是否完全被引号包围。

签名

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()

确定一个对象是否是对象。

签名

isRecord(o: unknown): o is Record<PropertyKey, unknown>;

参数

  • o — 需要检查的值。

返回

boolean

kebab()

这将驼峰式命名转换为短横线命名。它只从驼峰式转换为短横线命名。

签名

kebab(str: string): string;

参数

  • str — 需要转换为短横线命名的字符串。

返回

string

nodeProps()

从对象中过滤出不应被视为核心节点的"props"的值,如"value"和"name"。

签名

nodeProps(...sets: Array<Record<string, any>>): Record<string, any>;

参数

  • sets — 需要从中获取过滤值的数组。

返回

Record<string, any>

nodeType()

给定一个FormKit输入类型,返回正确的lowerCased()类型。

签名

nodeType(type: string): 'list' | 'group' | 'input';

参数

  • type — 需要检查以获取正确类型的字符串

返回

'list' | 'group' | 'input'

oncePerTick()

给定一个函数,每个调用堆栈只会进行一次调用。所有其他的都将被丢弃。

签名

oncePerTick<T extends CallableFunction>(fn: T): T;

参数

  • fn — 每个刻度调用一次的函数。

返回

only()

从给定对象中提取一组键。重要的是,即使这些值在原始对象上没有设置,这也会提取值 - 它们只会有一个未定义的值。

签名

only(obj: Record<string, any>, include: Array<string | RegExp>): Record<string, any>;

参数

  • obj — 从中获取值的对象。
  • include — 要获取的项目数组。

返回

Record<string, any>

parseArgs()

解析逗号分隔的参数字符串。

签名

parseArgs(str: string): string[];

参数

  • str — 从中解析参数的字符串。

返回

string[]

regexForFormat()

给定一个字符串日期格式,返回一个匹配的正则表达式。

签名

regexForFormat(format: string): RegExp;

参数

  • format — 要转换为RegExp的字符串。

返回

RegExp

示例

regexForFormat('MM') // 返回 '(0[1-9]|1[012])'

rmEscapes()

删除额外的转义字符。

签名

rmEscapes(str: string): string;

参数

  • str — 从中删除额外转义字符的字符串。

返回

string

setify()

创建指定类型的新集合,并使用来自数组或现有集合的值。

签名

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()

浅克隆给定的对象。

签名

shallowClone<T>(obj: T, explicit?: string[]): T;

参数

  • obj — 要浅克隆的对象。
  • explicit 可选 — 要明确克隆的键数组。

返回

T

slugify()

将任何字符串转换为URL/DOM安全字符串。

签名

slugify(str: string): string;

参数

  • str — 需要转化为 URL 安全字符串的字符串。

返回

string

spread()

展开一个对象或数组,否则返回相同的值。

签名

spread<T>(obj: T, explicit?: string[]): T;

参数

  • obj — 需要展开的对象。
  • explicit 可选 — 需要明确展开的项目数组。

返回

T

token()

生成一个随机字符串。

签名

token(): string;

返回

string

示例

import { token } from '@formkit/utils'

const tk = token()
// 'jkbyqnphqm'

undefine()

确定一个属性的值是否存在(true)或不存在(undefined)。例如,属性 disabled 应该仅通过存在就被禁用,但如果它被设置为字符串 "false" —— 那么它就不应该被禁用。

签名

undefine(value: unknown): true | undefined;

参数

  • value — 需要检查是否为 undefined 的值。

返回

true | undefined

whenAvailable()

使用全局变异观察器等待给定元素在 DOM 中出现。

签名

whenAvailable(childId: string, callback: (el: Element) => void, root?: Document | ShadowRoot): void;

参数

  • childId — 子节点的 id。
  • callback — 当找到子节点时调用的回调。
  • root 可选

TypeScript

FormKitDateTokens

可以用于日期格式化的日期令牌字符串。

export type FormKitDateTokens = 'MM' | 'M' | 'DD' | 'D' | 'YYYY' | 'YY';