Ts 类型 工具 方法

1. Exclude<T, U>:

Exclude 是一个内置的条件类型,用于从联合类型 T 中排除 U 中存在的类型。它通常用于类型过滤。

TypeScript 复制代码
{
  /**
   * 一般用于简单类型, 从联合类型中过滤某些类型
   */
  type A = string | number | boolean;
  type B = Exclude<A, string>; // number | boolean
  type C = Exclude<A, string | boolean>; // number
}

2. Omit<T, K>:

Omit 用于从类型 T 中排除某些键(K)。它主要用于对象类型的部分属性排除。

TypeScript 复制代码
{
  /**
   * type 类型 或 interface 类型的排除
   */
  type A = {
    a: string;
    c: number;
    d: boolean;
  };

  type B = Omit<A, 'a' | 'c'>;
}

3. NonNullable<T>:

NonNullable 是一个内置工具类型,用于从类型 T 中排除 null 和 undefined。

TypeScript 复制代码
{
  /**
   * NonNullable : 排除 null 和 undefined
   */
  type A = string | number | null | undefined;
  type B = NonNullable<A>; // string | number
}

4. Pick<T, K>:

Pick 是一个工具类型,它从类型 T 中提取一组属性 K。它主要用于对象类型的部分属性选择。

TypeScript 复制代码
{
  /**
   * Pick 从对象中提取某些属性
   */
  type A = {
    a: string;
    b: number;
    c: boolean;
    d: string | number;
  };
  /**
   * type B = {
   *  a: string;
   *  d: string | number;
   * }
   */
  type B = Pick<A, 'a' | 'd'>;
}

5. readonly 和 DeepReadonly:

• readonly 是一个 TypeScript 修饰符,用于将某个属性标记为只读,意味着该属性不能被修改。

• DeepReadonly 是自定义的类型,它会递归地将对象及其所有嵌套属性都变为只读。

TypeScript 复制代码
{
  /**
   * readonly 标记为只读
   * DeepReadonly 将所有属性都变为只读
   */
  type A = {
    readonly a: string;
    readonly b: number;
  };
  const a: A = {
    a: '1',
    b: 2
  };
  // a.a = '2'; // 无法为"a"赋值,因为它是只读属性。

  type C = {
    a: {
      b: string;
    };
  };
  type D = DeepReadonly<C>; // 将所有属性都变为只读
}

6.提取数组中 item 项的类型

TypeScript 复制代码
{
  /**
   * 提取数组中 item项 的类型
   */
  type A = string | number[];
  type B = A[number]; // string | number
}
相关推荐
EchoEcho5 小时前
记录overflow:hidden和scrollIntoView导致的页面问题
前端·css
Cache技术分享5 小时前
318. Java Stream API - 深入理解 Java Stream 的中间 Collector —— mapping、filtering 和 fla
前端·后端
竟未曾年少轻狂6 小时前
Vue3 生命周期钩子
前端·javascript·vue.js·前端框架·生命周期
TT哇6 小时前
【实习】数字营销系统 银行经理端(interact_bank)前端 Vue 移动端页面的 UI 重构与优化
java·前端·vue.js·ui
蓝帆傲亦6 小时前
Web前端跨浏览器兼容性完全指南:构建无缝用户体验的最佳实践
前端
晴殇i6 小时前
【前端缓存】localStorage 是同步还是异步的?为什么?
前端·面试
不一样的少年_6 小时前
Chrome 插件实战:如何实现“杀不死”的可靠数据上报?
前端·javascript·监控
深度涌现6 小时前
DNS详解——域名是如何解析的
前端
小码哥_常6 小时前
Android内存泄漏:成因剖析与高效排查实战指南
前端
卤代烃6 小时前
✨ 形势比人强,Chrome 大佬也去搞 Gemini 了
前端·agent·vibecoding