「2024年」前端开发常用工具函数总结 TypeScript

前言

在前端开发中,工具函数是提高代码复用率、保持代码整洁和增加开发效率的关键。使用 TypeScript 编写工具函数不仅可以帮助开发者捕捉到更多的类型错误,还可以提供更清晰的代码注释和更智能的代码补全。下面是一些在 TypeScript 中常用的前端开发工具函数的总结。。

示例

1. 深拷贝对象

在处理对象时,经常需要创建对象的深拷贝来避免副作用。

function deepClone<T>(target: T): T {
  if (target === null || typeof target !== "object") {
    return target;
  }
  let cloneTarget = Array.isArray(target) ? [] : {};
  for (const key in target) {
    cloneTarget[key] = deepClone(target[key]);
  }
  return cloneTarget as T;
}

2. 防抖函数

防抖函数可以防止函数被频繁调用,尤其适用于输入框搜索、窗口大小变化等场景。

function debounce<F extends (...args: any[]) => any>(func: F, wait: number): (...args: Parameters<F>) => void {
  let timeoutId: ReturnType<typeof setTimeout> | null = null;
  return function(...args: Parameters<F>) {
    if (timeoutId !== null) {
      clearTimeout(timeoutId);
    }
    timeoutId = setTimeout(() => func(...args), wait);
  };
}

3. 节流函数

节流函数确保在特定的时间窗口内最多只执行一次函数。

function throttle<F extends (...args: any[]) => any>(func: F, limit: number): (...args: Parameters<F>) => void {
  let lastFunc: ReturnType<typeof setTimeout> | null = null;
  let lastRan: number | null = null;
  return function(...args: Parameters<F>) {
    if (!lastRan) {
      func(...args);
      lastRan = Date.now();
    } else {
      clearTimeout(lastFunc!);
      lastFunc = setTimeout(function() {
        if (Date.now() - lastRan! >= limit) {
          func(...args);
          lastRan = Date.now();
        }
      }, limit - (Date.now() - lastRan));
    }
  };
}

4. 类型守卫

类型守卫可以帮助TypeScript对类型进行更准确的判断。

function isString(val: unknown): val is string {
  return typeof val === 'string';
}

function isNumber(val: unknown): val is number {
  return typeof val === 'number';
}

5. 睡眠函数

在某些异步操作中,可能需要等待一定时间再进一步操作,这时睡眠函数非常有用。

function sleep(ms: number): Promise<void> {
  return new Promise(resolve => setTimeout(resolve, ms));
}

6. 获取URL参数

获取URL参数是前端开发中常见的需求,尤其是在处理网页跳转和数据传递的场景。

function getURLParameters(url: string): Record<string, string> {
  return (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(
    (a, v) => {
      const [key, value] = v.split('=');
      a[key] = decodeURIComponent(value);
      return a;
    },
    {} as Record<string, string>
  );
}

7. 安全获取对象属性

在深层嵌套的对象中安全地获取属性,可以避免因为中间某个属性为undefined而导致的错误。

function get<T, P extends keyof T>(obj: T, path: P | string): T[P] | undefined {
  const paths = path.toString().split('.');
  let result = obj;
  for (const p of paths) {
    result = result[p];
    if (result === undefined) {
      return undefined;
    }
  }
  return result as T[P];
}

总结这些工具函数可以大大提升你在使用 TypeScript 进行前端开发时的效率和代码的质量。当然,这只是冰山一角,随着你对项目的深入,可能会有更多定制化的工具函数需要开发。

7. 判断是否是多维数组

  const isDeep = (arr: any) => arr.some((item: any) => item instanceof Array);

相关推荐

  1. 前端开发函数整理

    2024-05-04 21:46:04       35 阅读
  2. 前端框架总结

    2024-05-04 21:46:04       37 阅读
  3. clickhouse函数总结

    2024-05-04 21:46:04       14 阅读
  4. USB - 开发工具

    2024-05-04 21:46:04       7 阅读
  5. 前端】CSS选择器总结

    2024-05-04 21:46:04       16 阅读
  6. 前端npm命令总结

    2024-05-04 21:46:04       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-04 21:46:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-04 21:46:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-04 21:46:04       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-04 21:46:04       20 阅读

热门阅读

  1. GitHacker:Git源码泄漏检测工具可恢复整个Git Repo

    2024-05-04 21:46:04       11 阅读
  2. 由混淆依赖所引起的RCE

    2024-05-04 21:46:04       10 阅读
  3. 深入探索Elasticsearch中的QueryBuilders

    2024-05-04 21:46:04       10 阅读
  4. 每日一算法

    2024-05-04 21:46:04       13 阅读
  5. 深入探索 Vue 中的 createVNode 与 resolveComponent

    2024-05-04 21:46:04       10 阅读
  6. TS 泛型

    2024-05-04 21:46:04       9 阅读
  7. 基于 V2G 技术的电动汽车实时调度策略

    2024-05-04 21:46:04       9 阅读
  8. CentOS中常用的命令

    2024-05-04 21:46:04       7 阅读