TypeScript 中的 class 与 interface 的区别

TypeScript 是一种 JavaScript 的超集,它提供了静态类型检查,让我们在开发大型 JavaScript 应用时更加安全和高效。在 TypeScript 中,我们可以使用 class 和 interface 来组织代码,但它们有着不同的作用和用法。

class

class 是一种创建对象的模板,它可以包含属性和方法。在 TypeScript 中,我们可以使用 class 关键字来定义一个类,如下所示:

class Animal {
  constructor(public name: string) {}
  
  sayHi() {
    console.log(`My name is ${this.name}`);
  }
}

const animal = new Animal('Tom');
animal.sayHi(); // My name is Tom

在上面的代码中,我们定义了一个 Animal 类,它有一个 name 属性和一个 sayHi 方法。我们可以使用 new 关键字来创建一个 Animal 类的实例,并调用 sayHi 方法输出对象的属性。

class 还可以继承其他类。子类可以访问父类的属性和方法,并且可以在其基础上进行扩展,如下所示:

class Cat extends Animal {
  constructor(name: string) {
    super(name);
  }
  
  sayHi() {
    console.log(`Meow, My name is ${this.name}`);
  }
}

const cat = new Cat('Tom');
cat.sayHi(); // Meow, My name is Tom

在上面的代码中,我们定义了一个 Cat 类,它继承自 Animal 类。Cat 中的 sayHi 方法覆盖了父类的 sayHi 方法,并且在其基础上输出了 "Meow"。

使用 class 可以大大提高代码的可读性和可维护性,尤其是在大型项目中。

interface

interface 是一种描述对象形状的结构类型。在 TypeScript 中,我们可以使用 interface 关键字来定义一个接口,如下所示:

interface Person {
  name: string;
  age: number;
}

const tom: Person = {
  name: 'Tom',
  age: 25
}

在上面的代码中,我们定义了一个 Person 接口,它包含两个属性:name 和 age。我们可以创建一个符合 Person 形状的对象,并将其赋值给 tom 变量。

interface 可以描述对象的属性和方法,也可以用于定义函数签名,类实现接口等。如下所示:

interface Alarm {
  alert(): void;
}

class Door implements Alarm {
  alert() {
    console.log('Door: beep beep!');
  }
}

class Car implements Alarm {
  alert() {
    console.log('Car: beep beep!');
  }
}

在上面的代码中,我们定义了一个 Alarm 接口,它包含一个 alert 方法。Door 和 Car 类实现了 Alarm 接口,并实现了 alert 方法。

interface 可以用于描述类型的形状,让我们的代码更具有可读性和可维护性。

class 和 interface 的区别

class 和 interface 在 TypeScript 中有着不同的作用和用法,具体区别如下:

  1. class 是创建对象的模板,interface 是描述类型的形状。
  2. class 可以包含属性和方法,可以进行类的扩展和复用,interface 只能描述属性和方法的形状。
  3. class 用于创建实例,而 interface 只能用于检查类型。

总结

class 和 interface 在 TypeScript 中都有着重要的作用和用法。class 可以创建对象和进行类的扩展和复用,interface 可以描述类型的形状和用于类型检查。

在实际项目中,我们应该根据实际情况选择合适的方式来组织代码,以提高代码的可读性和可维护性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659f47b2add4f0e0ff7f3aaa


纠错反馈