Common
Common 是一个提供常用工具函数的工具包,它包含了一些在日常开发中经常使用的基础函数。
特性
- 提供常用的工具函数
- 类型安全的函数实现
- 提供完整的 TypeScript 类型支持
- 轻量级,无依赖
安装
npm install @kazura/common
使用方法
基本用法
import { noop, extend, hasOwn, toRawType } from '@kazura/common'
// 使用 noop 函数
const callback = noop
// 使用 extend 函数(Object.assign 的别名)
const obj1 = { a: 1 }
const obj2 = { b: 2 }
const result = extend({}, obj1, obj2) // { a: 1, b: 2 }
// 使用 hasOwn 函数
const obj = { prop: 'value' }
console.log(hasOwn(obj, 'prop')) // true
console.log(hasOwn(obj, 'toString')) // false
// 使用 toRawType 函数
console.log(toRawType(new Map())) // "Map"
console.log(toRawType([])) // "Array"
console.log(toRawType({})) // "Object"
API 参考
函数
noop
function noop(..._: any[]): any
一个什么也不做的函数。用于作为默认的回调函数或占位符。
extend
const extend = Object.assign
对象的合并函数 Object.assign 的引用。用于合并多个对象的属性。
hasOwnProperty
const hasOwnProperty = Object.prototype.hasOwnProperty
Object.prototype 上的 hasOwnProperty 方法的引用。
hasOwn
function hasOwn(val: object, key: string | symbol): key is keyof typeof val
检查对象是否直接拥有指定属性。
参数:
val
: 要检查的对象key
: 要检查的属性键
返回值:
- 如果对象直接拥有该属性,则返回 true,否则返回 false
objectToString
const objectToString = Object.prototype.toString
Object.prototype 上的 toString 方法的引用。
toTypeString
function toTypeString(value: unknown): string
获取一个对象的类型字符串。
参数:
value
: 要获取类型字符串的对象
返回值:
- 对象的类型字符串
示例:
toTypeString(new Map()) // "[object Map]"
toTypeString([]) // "[object Array]"
toTypeString({}) // "[object Object]"
toRawType
function toRawType(value: unknown): string
获取一个对象的原始类型。
参数:
value
: 要获取原始类型的对象
返回值:
- 对象的原始类型
示例:
toRawType(new Map()) // "Map"
toRawType([]) // "Array"
toRawType({}) // "Object"
toRawType('string') // "String"
toRawType(123) // "Number"
toRawType(true) // "Boolean"
注意事项
hasOwn
函数只会检查对象自身的属性,不会检查原型链上的属性toTypeString
和toRawType
函数可以用于类型检查,但建议使用 TypeScript 的类型系统进行类型检查extend
函数是Object.assign
的别名,使用方式完全相同
示例
类型检查
import { toRawType } from '@kazura/common'
function processValue(value: unknown) {
switch (toRawType(value)) {
case 'Array':
return value.map((item) => processValue(item))
case 'Object':
return Object.fromEntries(Object.entries(value).map(([key, val]) => [key, processValue(val)]))
default:
return value
}
}
对象属性检查
import { hasOwn } from '@kazura/common'
function validateConfig(config: object) {
const requiredProps = ['name', 'version', 'description']
for (const prop of requiredProps) {
if (!hasOwn(config, prop)) {
throw new Error(`Missing required property: ${prop}`)
}
}
}
对象合并
import { extend } from '@kazura/common'
const defaultConfig = {
timeout: 5000,
retries: 3,
debug: false,
}
const userConfig = {
timeout: 3000,
debug: true,
}
const finalConfig = extend({}, defaultConfig, userConfig)
// { timeout: 3000, retries: 3, debug: true }