is.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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 isNumber(val: unknown): val is number {
  21. return is(val, 'Number');
  22. }
  23. export function isPromise<T = any>(val: unknown): val is Promise<T> {
  24. return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch);
  25. }
  26. export function isString(val: unknown): val is string {
  27. return is(val, 'String');
  28. }
  29. export const isFunction = (val: unknown): val is Function => typeof val === 'function';
  30. export function isBoolean(val: unknown): val is boolean {
  31. return is(val, 'Boolean');
  32. }
  33. export function isRegExp(val: unknown): val is RegExp {
  34. return is(val, 'RegExp');
  35. }
  36. export function isArray(val: unknown): val is Array<any> {
  37. return val && Array.isArray(val);
  38. }
  39. export const isClient = () => {
  40. return typeof window !== 'undefined';
  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 function isImageDom(o: Element) {
  50. return o && ['IMAGE', 'IMG'].includes(o.tagName);
  51. }
  52. export const isTextarea = (element: Element | null): element is HTMLTextAreaElement => {
  53. return element !== null && element.tagName.toLowerCase() === 'textarea';
  54. };