MST

星途 面试题库

面试题:TypeScript接口interface的继承与交叉类型应用

假设有一个接口Animal,包含name属性和age属性。再定义一个接口Flyable,包含fly方法。现在要求定义一个接口Bird,它继承自Animal接口,同时实现Flyable接口。另外,定义一个交叉类型,将Bird接口和一个包含color属性的接口进行交叉,然后创建一个符合这个交叉类型的实例,并描述这种交叉类型和接口继承在使用场景上的区别。
14.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. 定义接口和交叉类型:
interface Animal {
  name: string;
  age: number;
}

interface Flyable {
  fly(): void;
}

interface Bird extends Animal, Flyable {}

interface Colorful {
  color: string;
}

type BirdWithColor = Bird & Colorful;
  1. 创建符合交叉类型的实例:
const myBird: BirdWithColor = {
  name: 'Sparrow',
  age: 2,
  fly() {
    console.log('I can fly!');
  },
  color: 'brown'
};
  1. 交叉类型和接口继承在使用场景上的区别
    • 接口继承
      • 目的:用于建立类型之间的父子关系,子类(继承的接口)自动拥有父类(被继承的接口)的所有属性和方法。例如Bird接口继承Animal接口,这样Bird接口就有了nameage属性,同时还能实现Flyable接口的fly方法,这是一种很直观的类型扩展方式,用于描述具有明确层级关系的类型。
      • 使用场景:适用于当你有一个通用的类型,并且有一些更具体的类型需要基于这个通用类型进行扩展时。比如在动物这个大体系下,Bird作为一种具体的动物类型,继承Animal接口来获取动物共有的属性。
    • 交叉类型
      • 目的:将多个类型合并为一个类型,新类型同时具备参与交叉的所有类型的属性和方法。例如BirdWithColor交叉类型,它结合了Bird接口和Colorful接口的特性,使得这个类型既有Bird的属性和方法,又有color属性。
      • 使用场景:当你需要将多个独立的类型特征组合到一个对象上,而这些类型之间可能不存在明显的层级关系时使用。比如Colorful接口描述颜色特征,Bird接口描述鸟类特征,它们本身并没有直接的继承关系,但通过交叉类型可以创建出既有鸟类特征又有颜色特征的新类型。