Skip to content

Extends

TypeScript 中的 extends 关键字有多种用法:

  1. 扩展 interface
  2. JavaScript ES6 中 class 的继承
  3. 条件类型

扩展 interface

ts
interface BaseInfo {
    name: string
}
interface Dog extends BaseInfo {
    age: number
}
// Dog {
//   name: string
//   age: number
// }

class 的继承

ts
class Animal {
    age: number
}
class Cat extends Animal {
    run() {}
    walk() {}
}

条件类型

LeftType extends RightType ? TrueBranch : FalseBranch

LeftType 能够赋值给 RightType 时,extends 表达式返回的类型为 TrueBranch,否则为 FalseBranch

代码示例 1

ts
type First<T> = T extends [] ? [] : T[0]

通过 infer 关键字,我们可以更好地从 TrueBranch 中提取类型,而不是手动地获取类型

代码示例 2

ts
type Flatten<T> = T extends Array<infer Item> ? Item : T