返回

领略TypeScript中implements与extends的奥秘

前端

TypeScript中的类和接口

在TypeScript中,类和接口是两种重要的类型。类用于定义对象,而接口用于定义对象的行为。类可以继承自其他类,也可以实现接口。

extends

extends用于建立类与类之间的继承关系。当一个类继承自另一个类时,它就会继承该类的所有属性和方法。子类可以覆盖父类的方法,也可以添加新的方法。

class Parent {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

class Child extends Parent {
  age: number;

  constructor(name: string, age: number) {
    super(name);
    this.age = age;
  }

  greet() {
    super.greet();
    console.log(`I am ${this.age} years old.`);
  }
}

const child = new Child("John", 25);
child.greet();

在上面的示例中,Child类继承自Parent类。Child类继承了Parent类的name属性和greet()方法。Child类还添加了一个新的属性age和一个新的方法greet()

implements

implements关键字用于确保类实现了特定的接口。当一个类实现一个接口时,它必须实现接口中定义的所有方法。

interface IGreeter {
  greet(): void;
}

class Greeter implements IGreeter {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

const greeter = new Greeter("Jane");
greeter.greet();

在上面的示例中,Greeter类实现了IGreeter接口。Greeter类必须实现IGreeter接口中定义的greet()方法。

extends和implements的区别

extendsimplements这两个关键字在TypeScript中都有着重要的作用。extends用于建立类与类之间的继承关系,而implements用于确保类实现了特定的接口。

extendsimplements的区别在于,extends可以用于继承类中的所有属性和方法,而implements只能用于实现接口中定义的方法。

class Parent {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

interface IGreeter {
  greet(): void;
}

class Child extends Parent implements IGreeter {
  age: number;

  constructor(name: string, age: number) {
    super(name);
    this.age = age;
  }

  greet() {
    super.greet();
    console.log(`I am ${this.age} years old.`);
  }
}

const child = new Child("John", 25);
child.greet();

在上面的示例中,Child类继承自Parent类并实现了IGreeter接口。Child类继承了Parent类的name属性和greet()方法,也实现了IGreeter接口中定义的greet()方法。

总结

在本文中,我们探讨了TypeScript中extendsimplements这两个关键字的用法和区别。我们看到,extends用于建立类与类之间的继承关系,而implements用于确保类实现了特定的接口。我们也看到,extendsimplements的区别在于,extends可以用于继承类中的所有属性和方法,而implements只能用于实现接口中定义的方法。