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
从以上代码可以看出,添加中括号,可以对类型值进行完全匹配比较。
# 参考
Last Updated: 4/15/2022, 3:09:51 PM