请解释 TypeScript 中接口的概念,并说明如何定义一个接口。
考察说明
考查对 TypeScript 接口核心概念和定义语法的掌握程度。
回答思路
- 【回答框架 1】接口是 TypeScript 中用于定义对象结构或契约的语法,它描述对象应有的属性及其类型,但不提供具体实现。接口通过 interface 关键字定义,例如 interface Person { name: string; age: number },表示一个包含 name 和 age 属性的对象类型。
- 【回答框架 2】接口可以定义可选属性(属性名后加 ?)、只读属性(readonly 修饰符)以及函数类型(如 interface SearchFunc { (source: string, subString: string): boolean })。接口还支持继承,通过 extends 关键字扩展其他接口,实现接口的组合复用。
- 【回答框架 3】接口在编译阶段用于类型检查,编译后不会生成任何 JavaScript 代码,属于纯类型层面的抽象。它常用于约束函数参数、对象变量或类的实现结构,提高代码的可读性和可维护性。
- 【回答框架 4】定义接口时,属性类型可以是基本类型、联合类型、数组、元组或其他接口,也可以使用索引签名(如 [key: string]: any)描述动态属性。接口与类型别名(type)在多数场景可互换,但接口更侧重于对象结构的声明,且支持声明合并。
- 【回答框架 5】实际使用中,接口常用于定义 API 响应结构、组件 props 或配置对象,确保数据形状一致。通过接口约束,可以在开发阶段捕获属性缺失或类型错误,减少运行时异常。
- 【关键点 1】接口用 interface 关键字定义,描述对象结构,不包含实现。
- 【关键点 2】支持可选属性、只读属性、函数类型和继承。
- 【关键点 3】接口仅存在于编译期,编译后无运行时产物。
- 【关键点 4】接口与类型别名有区别,接口支持声明合并,类型别名更灵活。
- 【关键点 5】接口常用于约束对象、函数参数和类实现,提升类型安全。
- 【易错点 1】接口不能表示联合类型或映射类型,这些场景需用类型别名。
- 【易错点 2】接口的只读属性仅在编译期检查,运行时仍可被修改。
- 【易错点 3】过度使用接口可能导致类型定义冗余,应结合类型推断简化代码。