在 TypeScript 中,extends 关键字可以用于哪些场景?请分别说明其作用。
考察说明
考察对 TypeScript 中 extends 关键字多种用途的理解与归纳能力。
回答思路
- 【回答框架 1】在 TypeScript 中,extends 主要有三种核心用途。第一,用于接口继承,一个接口可以通过 extends 继承一个或多个其他接口,从而复用并扩展其成员定义。第二,用于类继承,一个类可以通过 extends 继承另一个类的属性和方法,实现面向对象中的继承机制,并可通过 super 调用父类构造和方法。第三,用于条件类型中,extends 作为类型约束和条件判断的关键字,例如 T extends U ? X : Y 用于检查类型 T 是否可赋值给类型 U。
- 【回答框架 2】在接口继承中,被继承的接口称为父接口,继承后的子接口会包含父接口的所有成员,并可添加新成员或覆盖同名成员(需类型兼容)。类继承时,子类继承父类的非私有成员,可以重写方法或属性,但必须保持兼容性。条件类型中的 extends 则用于泛型约束,例如 function f<T extends SomeType>() 确保传入类型满足特定形状,避免不合法操作。
- 【回答框架 3】此外,extends 还用于映射类型中的 key remapping 和模板字面量类型的模式匹配,但在基础面试中,掌握接口继承、类继承和条件类型约束这三个主要场景即可满足大多数需求。
- 【回答框架 4】在回答时,建议结合实际示例说明语法与行为差异,并强调 extends 在条件类型中的判断是结构化类型系统下的可赋值性判断,而非名义上的继承关系。
- 【关键点 1】extends 可让接口继承多个接口,实现成员复用与扩展。
- 【关键点 2】类通过 extends 实现单继承,子类拥有父类成员并可重写。
- 【关键点 3】条件类型中 extends 用于泛型约束与条件判断,基于可赋值性。
- 【关键点 4】映射类型中可用于 key 重映射或过滤。
- 【易错点 1】容易混淆接口继承与类继承的语法和限制,如类只能单继承。
- 【易错点 2】在条件类型中,extends 判断的是可赋值性,而非严格相等,可能产生意外结果。
- 【易错点 3】不要在泛型约束中滥用 extends,避免过度限制导致不灵活。