@formkit/utils

介绍

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

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

函数

assignDeep()

执行递归的 Object.assign 类似操作。

签名

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

对给定对象执行递归克隆。仅适用于数组和 POJO 等简单对象。

签名

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

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。

返回值

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,纯粹的旧 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()

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

签名

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 命名。仅从驼峰转换为 kebab。

签名

kebab(str: string): string;

参数

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

返回值

string

nodeProps()

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

签名

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

参数

  • sets — 要过滤值的数组。

返回值

Record<string, any>

nodeType()

根据 FormKit 输入类型返回正确的小写类型。

签名

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

参数

  • type — 要检查正确类型的字符串。

返回值

'list' | 'group' | 'input'

oncePerTick()

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

签名

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

参数

  • fn — 每个调用栈只会调用一次的函数。

返回值

only()

从给定对象中提取一组键。重要的是,即使这些值在原始对象上没有设置,它们也会被提取出来 —— 它们只是具有 undefined 值。

签名

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

示例

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;

返回值

字符串

示例

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): void;

参数

  • childId — 子节点的 id。
  • callback — 当找到子节点时要调用的回调函数。

TypeScript

FormKitDateTokens

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

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