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
}
相关推荐
waterHBO6 分钟前
chrome 浏览器插件 myTools, 日常小工具。
前端·chrome
哎呦你好8 分钟前
HTML 颜色全解析:从命名规则到 RGBA/HSL 值,附透明度设置与场景应用指南
前端·css·html
多云的夏天35 分钟前
前端:VUE-(0)-环境搭建和helloworld
前端·javascript·vue.js
Dontla39 分钟前
BootCDN介绍(Bootstrap主导的前端开源项目免费CDN加速服务)
前端·开源·bootstrap
90后小陈老师1 小时前
WebXR教学 07 项目5 贪吃蛇小游戏
前端·数码相机
一口一个橘子1 小时前
[ctfshow web入门] web118
前端·web安全·网络安全
GanGuaGua1 小时前
Vue3:脚手架
前端·javascript·css·vue.js·vue
鸡吃丸子2 小时前
常见的实时通信技术(轮询、sse、websocket、webhooks)
前端·websocket·状态模式
胡斌附体3 小时前
vue添加loading后修复页面渲染问题
前端·javascript·vue.js·渲染·v-if·异步加载
酷爱码4 小时前
css中的 vertical-align与line-height作用详解
前端·css