Skip to content

类型判断

type-guards 目录用于承载所有运行时类型判断方法,对应源码目录 packages/utils/type-guards/

其中既包含统一入口 is,也包含 isDateisString 这类一个方法一个文件的具名导出。

当前内容

  • is
  • isArrayisArrayBufferisBigIntisBoolean
  • isDateisErrorisFunction
  • isMapisNullisNumber
  • isObjectisPlainObjectisPromiseisRegExp
  • isSetisStringisSymbol
  • isUndefinedisWeakMapisWeakSet

使用方式

ts
import { is, isArray, isString } from 'bzsh-ui'

is.string('demo') // true
is.number(1) // true
is.array([]) // true
is.arrayBuffer(new ArrayBuffer(8)) // true
is.null(null) // true
is.plainObject({}) // true

isString('demo') // true
isArray([]) // true

为什么有 is 和 isXxx 两种形式

  • is.xxx 适合统一风格、集中书写条件判断。
  • isXxx 适合按需导入,减少单个文件中的导入项层级。
  • 两者底层逻辑一致,只是暴露形式不同。
  • 面向组件库使用者时,优先使用 bzsh-ui 作为导入入口。

当前支持

方法说明
is.array判断是否为数组
is.arrayBuffer判断是否为 ArrayBuffer
is.bigInt判断是否为 bigint
is.boolean判断是否为布尔值
is.date判断是否为 Date
is.error判断是否为 Error
is.function判断是否为函数
is.map判断是否为 Map
is.null判断是否为 null
is.number判断是否为数字
is.object判断是否为对象
is.plainObject判断是否为普通对象
is.promise判断是否为 Promise
is.regExp判断是否为 RegExp
is.set判断是否为 Set
is.string判断是否为字符串
is.symbol判断是否为 Symbol
is.undefined判断是否为 undefined
is.weakMap判断是否为 WeakMap
is.weakSet判断是否为 WeakSet

典型场景

ts
import { is } from 'bzsh-ui'

function normalizeValue(value: unknown) {
  if (is.string(value)) {
    return value.trim()
  }

  if (is.array(value)) {
    return value.length
  }

  if (is.plainObject(value)) {
    return Object.keys(value)
  }

  return value
}

同步导出

除了 is.xxx 这种聚合用法,工具包也同步导出了独立函数,并且这些独立函数都放在 packages/utils/type-guards/ 下单独维护:

ts
import { isArray, isNumber, isString } from 'bzsh-ui'

推荐方式

  • 需要统一风格时,优先使用 is.xxx
  • 需要单独按需导入时,使用 isArrayisString 这类具名导出。
  • 文档默认展示对外导入方式,也就是直接从 bzsh-ui 导入。
  • 只有在 monorepo 内部按包开发时,才考虑使用 @bzsh-ui/utils 这类工作区路径。

单项页面

继续阅读