export const toNumber = (val: number | string | boolean | undefined | null): number => { if (val == null) return 0 if (isString(val)) { val = parseFloat(val) val = Number.isNaN(val) ? 0 : val return val } if (isBool(val)) return Number(val) return val } export const isPlainObject = (val: unknown): val is Record => Object.prototype.toString.call(val) === '[object Object]' export function kebabCase(str: string): string { const ret = str.replace(/([A-Z])/g, ' $1').trim() return ret.split(' ').join('-').toLowerCase() } export const isString = (val: unknown): val is string => typeof val === 'string' export const isBool = (val: unknown): val is boolean => typeof val === 'boolean' export const isNumber = (val: unknown): val is number => typeof val === 'number' export const isURL = (val: string) => /^(http)|(\.*\/)/.test(val)