is.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /**
  2. * @description: 判断值是否未某个类型
  3. */
  4. export function is(val: unknown, type: string) {
  5. return Object.prototype.toString.call(val) === `[object ${type}]`
  6. }
  7. /**
  8. * @description: 是否为函数
  9. */
  10. export function isFunction<T extends (...args: any[]) => any>(val: unknown): val is T {
  11. return is(val, 'Function')
  12. }
  13. /**
  14. * @description: 是否已定义
  15. */
  16. export const isDef = <T = unknown>(val?: T): val is T => {
  17. return typeof val !== 'undefined'
  18. }
  19. /**
  20. * @description: 是否未定义
  21. */
  22. export const isUnDef = <T = unknown>(val?: T): val is T => {
  23. return !isDef(val)
  24. }
  25. /**
  26. * @description: 是否为对象
  27. */
  28. export const isObject = (val: any): val is Record<any, any> => {
  29. return val !== null && is(val, 'Object')
  30. }
  31. /**
  32. * @description: 是否为时间
  33. */
  34. export function isDate(val: unknown): val is Date {
  35. return is(val, 'Date')
  36. }
  37. /**
  38. * @description: 是否为数值
  39. */
  40. export function isNumber(val: unknown): val is number {
  41. return is(val, 'Number')
  42. }
  43. /**
  44. * @description: 是否为AsyncFunction
  45. */
  46. export function isAsyncFunction<T = any>(val: unknown): val is Promise<T> {
  47. return is(val, 'AsyncFunction')
  48. }
  49. /**
  50. * @description: 是否为promise
  51. */
  52. export function isPromise<T = any>(val: unknown): val is Promise<T> {
  53. return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch)
  54. }
  55. /**
  56. * @description: 是否为字符串
  57. */
  58. export function isString(val: unknown): val is string {
  59. return is(val, 'String')
  60. }
  61. /**
  62. * @description: 是否为boolean类型
  63. */
  64. export function isBoolean(val: unknown): val is boolean {
  65. return is(val, 'Boolean')
  66. }
  67. /**
  68. * @description: 是否为数组
  69. */
  70. export function isArray(val: any): val is Array<any> {
  71. return val && Array.isArray(val)
  72. }
  73. /**
  74. * @description: 是否客户端
  75. */
  76. export const isClient = () => {
  77. return typeof window !== 'undefined'
  78. }
  79. /**
  80. * @description: 是否为浏览器
  81. */
  82. export const isWindow = (val: any): val is Window => {
  83. return typeof window !== 'undefined' && is(val, 'Window')
  84. }
  85. /**
  86. * @description: 是否为 element 元素
  87. */
  88. export const isElement = (val: unknown): val is Element => {
  89. return isObject(val) && !!val.tagName
  90. }
  91. /**
  92. * @description: 是否为 null
  93. */
  94. export function isNull(val: unknown): val is null {
  95. return val === null
  96. }
  97. /**
  98. * @description: 是否为 null || undefined
  99. */
  100. export function isNullOrUnDef(val: unknown): val is null | undefined {
  101. return isUnDef(val) || isNull(val)
  102. }
  103. /**
  104. * @description: 是否为 16 进制颜色
  105. */
  106. export const isHexColor = (str: string) => {
  107. return /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(str)
  108. }