extends

4 阅读1分钟

extends 在 TS 里常见有 3 种含义(看你用在什么位置):

1)类继承(面向对象)

表示“子类继承父类”:

class Animal {
  move() {}
}

class Dog extends Animal {
  bark() {}
}

2)泛型约束(最常用)

表示“泛型 T 必须满足某种结构/范围”,否则不让用:

function getLen<T extends { length: number }>(x: T) {
  return x.length
}

getLen('abc')   // ✅ string 有 length
getLen([1, 2])  // ✅ 数组有 length
getLen(123)     // ❌ number 没有 length

3)条件类型里的判断(类型层 if)

T extends U ? A : B:判断 T 是否可赋值给 U:

type IsString<T> = T extends string ? true : false

type A = IsString<'hi'> // true
type B = IsString<1>    // false

记忆:

  • class 里:extends = 继承
  • 泛型里:extends = 约束(T 必须长这样)
  • 条件类型里:extends = 判断(像 if)