MST

星途 面试题库

面试题:TypeScript接口实现中的类型兼容性与多态性

在TypeScript中,当一个类实现多个接口,且这些接口之间存在类型兼容性问题时(例如,接口继承或属性类型部分重叠),如何确保代码的正确实现和多态性的有效运用?请举例说明,并解释类型检查机制在此过程中的工作原理。
17.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

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