is.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const toString = Object.prototype.toString;
  2. export function is(val: unknown, type: string) {
  3. return toString.call(val) === `[object ${type}]`;
  4. }
  5. export const isDef = <T = unknown>(val?: T): val is T => {
  6. return typeof val !== 'undefined';
  7. };
  8. export const isUnDef = <T = unknown>(val?: T): val is T => {
  9. return !isDef(val);
  10. };
  11. export const isObject = (val: any): val is Record<any, any> => {
  12. return val !== null && is(val, 'Object');
  13. };
  14. export function isDate(val: unknown): val is Date {
  15. return is(val, 'Date');
  16. }
  17. export function isNull(val: unknown): val is null {
  18. return val === null;
  19. }
  20. export function isNullAndUnDef(val: unknown): val is null | undefined {
  21. return isUnDef(val) && isNull(val);
  22. }
  23. export function isNumber(val: unknown): val is number {
  24. return is(val, 'Number');
  25. }
  26. export function isPromise<T = any>(val: unknown): val is Promise<T> {
  27. return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch);
  28. }
  29. export function isString(val: unknown): val is string {
  30. return is(val, 'String');
  31. }
  32. export const isFunction = (val: unknown): val is Function => typeof val === 'function';
  33. export function isBoolean(val: unknown): val is boolean {
  34. return is(val, 'Boolean');
  35. }
  36. export function isRegExp(val: unknown): val is RegExp {
  37. return is(val, 'RegExp');
  38. }
  39. export function isArray(val: unknown): val is Array<any> {
  40. return val && Array.isArray(val);
  41. }
  42. export const isWindow = (val: any): val is Window => {
  43. return typeof window !== 'undefined' && is(val, 'Window');
  44. };
  45. export const isElement = (val: unknown): val is Element => {
  46. return isObject(val) && !!val.tagName;
  47. };
  48. export const isServer = typeof window === 'undefined';
  49. export const isClient = typeof window !== 'undefined';
  50. export function isImageDom(o: Element) {
  51. return o && ['IMAGE', 'IMG'].includes(o.tagName);
  52. }
  53. export const isTextarea = (element: Element | null): element is HTMLTextAreaElement => {
  54. return element !== null && element.tagName.toLowerCase() === 'textarea';
  55. };
  56. export const isMobile = (): boolean => {
  57. return !!navigator.userAgent.match(
  58. /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
  59. );
  60. };