Hi FE !
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
  • Exclude和Omit的区别

Exclude和Omit的区别

TypeScript 中 Omit 和 Exclude 都有排除属性的能力,但是两者的使用场景和具体功能又不是完全一样

Exclude

Exclude< T, U > 作用:T中取T、U交集的补集

Exclude<T, U> 的主要作用是从 T 类型中排除出可以赋值给 U 的类型,创建出一个新的子类型。比如下面的例子:

type T = 'a' | 'b' | 'c';
type U = 'a' | 'b';
type Result = Exclude<T, U>;  // 结果是 'c'

说明:

在这个例子中,我们定义了两个类型 T 和 U,T 是一个包含 'a', 'b', 'c' 三个成员的联合类型,而 U 是包含 'a', 'b' 的联合类型。通过 Exclude<T, U> 我们从 T 中排除了可以赋值给 U 的类型,所以结果类型 Result 就变成了 'c'。

Omit

Omit<T, K> 的主要功能在于,从一个已有的对象类型 T 中排除指定的属性 K,进而创建一个新的对象类型。比如下面的例子:

type T = {
    a: number;
    b: string;
    c: boolean;
};
type K = 'a' | 'b';
type Result = Omit<T, K>;  // 结果是 { c: boolean }

说明:

在这个例子中,我们定义了一个对象类型 T,包含 'a', 'b' 和 'c' 三个属性。我们希望经过处理后得到一个新的对象类型,这个类型只包含 T 中的 'c' 属性。于是我们用 Omit<T, K> 排除了 'a' 和 'b' 两个属性,得到的新类型 Result 就只包含了 { c: boolean } 属性。

功能对比

Exclude的参数类型没有限制,可以是字面量也可以是具体的类型如string、boolean等,而Omit的第二参数则必须是第一参数的子属性

Omit 一般用于对象似的类型和 interface 类型;一般不用于联合类型; 而 Exclude 可以用于联合类型,一般不用于 interface 类型和对象似的类型;

Exclude 是针对联合类型,用于排除一些特定成员类型;Omit 是针对对象类型,用于忽略或排除某些特定属性;

Edit this page
最近更新: 2025/6/27 02:24
Contributors: qdleader
qdleader
本站总访问量 129823次 | 本站访客数 12人