Skip to main content

Extends

extends 本意为继承,但在 ts 却有着多种不同的用法。

接口继承

使用 interface 定义的类型可以实现继承,继承的接口拥有被继承接口的全部属性。

interface Animal {
name: string
age: number
}

interface Cat extends Animal {
species: 'cat'
}

const cat: Cat = {
name: 'mimi',
age: 2,
species: 'cat'
}

类继承

Class

条件类型

在类型定义中, 由于无法使用等号, 因此可以使用 extends 进行条件判断

type IsNumber<T> = T extends number ? true : false

const isNumber: IsNumber<18> = true
const isNumber: IsNumber<'lybenson'> = false

IsNumber 判断传入的泛型 T 是否是 number 类型,是则返回 true

类型推断

extends 搭配 infer 关键字可以进行类型推断

例如:获取数组类型最后一个元素类型

type Last<T extends any[]> = T extends [...unknown[], infer R] ? R : never