面试题答案
一键面试- 确保代码正确实现和多态性有效运用的方法:
- 明确接口契约:仔细分析每个接口的定义,确保类的实现满足所有接口的要求。例如,如果一个接口定义了某个方法,类必须正确实现该方法,包括方法签名(参数和返回值类型)要与接口定义一致。
- 解决类型重叠问题:当接口属性类型部分重叠时,要保证实现类的属性类型能够兼容所有重叠接口的要求。通常选择最严格(最具体)的类型作为实现类属性的类型。
- 利用接口继承关系:如果存在接口继承,实现类要确保满足所有继承链上接口的要求。
- 举例说明:
在上述例子中,// 定义接口A interface A { id: number; name: string; } // 定义接口B interface B { id: number; age: number; } // 定义实现类C class C implements A, B { id: number; name: string; age: number; constructor(id: number, name: string, age: number) { this.id = id; this.name = name; this.age = age; } } // 使用 const c = new C(1, 'test', 20);
C
类实现了A
和B
接口,A
和B
接口都有id
属性,且类型相同,C
类正确实现了两个接口要求的属性和类型。 - 类型检查机制工作原理:
- 属性检查:TypeScript会检查实现类是否包含接口中定义的所有属性,并且属性类型要兼容。例如,在上面的例子中,
C
类必须有id
、name
(来自A
接口)和age
(来自B
接口)属性,且id
为number
类型,name
为string
类型,age
为number
类型,否则会报错。 - 方法检查:如果接口定义了方法,实现类必须有相同签名的方法。比如,如果接口定义
function getName(): string
,实现类也必须有getName
方法且返回值类型为string
。 - 继承链检查:当存在接口继承时,TypeScript会递归检查实现类是否满足整个继承链上所有接口的要求。例如,如果
interface D extends A
,实现D
接口的类也要满足A
接口的要求。
- 属性检查:TypeScript会检查实现类是否包含接口中定义的所有属性,并且属性类型要兼容。例如,在上面的例子中,