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)