本篇介绍 TypeScript 实用类型中的 Extract 类型。看字面意思,Extract 是指取出、挑出的意思,Extract 会挑选出传入的两个联合类型中相同的成员,将这些相同的成员构造成一个新类型,构造的新类型有可能是联合类型,也有可能是其他任何类型。
下面是一个简单的例子:
type U1 = "a" | "b" | "c";
type U2 = "a" | "f";
type T0 = Extract<U1, U2>;上面代码中定义了两个联合类型 U1 和 U2,这两个联合类型中有一个相同的成员 "a",Extract 会将该成员 "a" 取出来构造一个新类型。构造的新类型 T0 等价于下面的类型:
// 通过 `Extract` 构造了一个新的字符串类型 `NewT0`
type NewT0 = "a";如果在两个联合类型中,存在多个相同的成员(两个及以上)时,Extract 会将这些成员构造成一个新的联合类型,下面是另一个例子:
type U3 = "a" | "b" | "c";
type U4 = "a" | "f" | "c";
type T1 = Extract<U3, U4>;上面两个联合类型 U3 和 U4 中存在多个相同的成员:"a" 和 "c",Extract 会将他们构造成一个新的联合类型,联合类型 T1 与下面的类型是等价的:
type NewT1 = "a" | "c";对初学者来说,还有一种情况容易受到误导,看下面的例子:
type U5 = string | number | (() => void);
type U6 = Function;
type T2 = Extract<U5, U6>; // type T2 = () => void;从字面量的角度来看,U5 和 U6 两个联合类型中并没有相同的成员,但是从类型角度来说 () => void 表示的是一个函数,它的类型与 Function 是等价的,因此构造出的新类型 T 是一个函数。
了解了 Extract 的用法,下面看一下它的类型定义源码,Extract 在实现上非常简单,源码如下:
/**
* Extract from T those types that are assignable to U
*/
type Extract<T, U> = T extends U ? T : never;通过 Extract 的源码我们不难发现,Extract 从 T 类型中取出 T 和 U 类型中共有的成员来构造一个新类型,如果其中没有共有成员,将返回 never 类型。
2 comments
华纳圣淘沙开户步骤详解(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程全解析(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司账户注册指南(183-8890-9465—?薇-STS5099【6011643】
新手如何开通华纳圣淘沙公司账户(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙企业开户标准流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户:从零到一(183-8890-9465—?薇-STS5099【6011643】
官方指南:华纳圣淘沙公司开户流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程说明书(183-8890-9465—?薇-STS5099【6011643】
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com