Allen Yu Allen Yu
Home
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《TypeScript入门教程》
GitHub (opens new window)
Home
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《TypeScript入门教程》
GitHub (opens new window)
  • 开始

  • 基础

    • 原始数据类型
    • 任意值
    • 类型推论
    • 联合类型
    • interfaces
    • 数组类型
    • 函数类型
    • 类型断言
    • 声明文件
    • 内置对象
    • keyof and typeof
    • extends
      • extends
      • 简单的值匹配 - 举个 🌰
      • 简单的类型匹配 - 举个 🌰
      • 非常规例子
      • 参考
  • 进阶

  • 实战

  • TypeScript
  • 基础
2022-03-26
目录

extends

# extends

类型的 extends 和 class 的继承有很大的不同,它更多的是用来检测两个类型的关系,所以又叫条件类型。

# 简单的值匹配 - 举个 🌰

type Equal<T, U> = T extends U ? true : false

type Num = Equal<1, 2> // false
type Str = Equal<'allen', 'allen'> // true

类似 JavaScript 中的三元运算符。

# 简单的类型匹配 - 举个 🌰

type IsNumber<T> = T extends number ? number : typeof T

# 非常规例子

T extends never 和 [T] extends [never] 这两个第一次看,就很懵,完全不知道意思,我们看看下面的 🌰

type P<T> = T extends never ? true : false
type A1 = P<never> // never
type A2 = P<any> // boolean
type A3 = P<591> // false
type A4 = P<unknown> // false
type A5 = P<'Allen'> // false

type Q<T> = [T] extends [never] ? true : false
type B1 = Q<never> // true
type B2 = Q<any> // false
type B3 = Q<591> // false
type B4 = Q<unknown> // false
type B5 = Q<'Allen'> // false

从以上代码可以看出,添加中括号,可以对类型值进行完全匹配比较。

# 参考

  • TypeScript 的 extends 条件类型 (opens new window)
Last Updated: 4/15/2022, 3:09:51 PM
keyof and typeof
类型别名

← keyof and typeof 类型别名→

最近更新
01
4 月第 2 周总结
04-17
02
工具类型
04-01
03
Google 搜索小技巧
03-28
更多文章>
Theme by Vdoing | Copyright © 2018-2022 Allen Yu
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式