Grundlegende Konzepte und Verwendung von TypeScript-Klassen

cover.png

Einführung

Frontend-Studenten verwenden häufig JavaScript, um Webanwendungen zu erstellen. Obwohl JavaScript eine flexible und leistungsstarke Sprache ist, kann es bei Großprojekten zu einigen Problemen kommen, wie z. B. Herausforderungen bei der Typsicherheit, der Codeorganisation und der Wartbarkeit. TypeScript, eine Obermenge von JavaScript, bietet eine Lösung für diese Probleme, indem es statische Typisierung und objektorientierte Konzepte einführt.

In diesem Artikel werden das Konzept und die Verwendung von Klassen in TypeScript vorgestellt. Ich hoffe, es kann Ihnen helfen, die Klassen in TypeScript besser zu verstehen und zu verwenden.

Klassenbasis

In TypeScript ist eine Klasse eine Art Blaupause zum Erstellen von Objekten, die die Eigenschaften und Methoden des Objekts definiert. Die Verwendung von Klassen ermöglicht die Kernkonzepte der objektorientierten Programmierung: Kapselung, Vererbung und Polymorphismus.

Klasse definieren

In TypeScript können wir classdas Schlüsselwort um eine Klasse zu definieren. Schauen wir uns ein einfaches Beispiel an:

class Animal {
  name: string;

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

  sayHello() {
    console.log(`我是 ${this.name}`);
  }
}

Der obige Code definiert eine Klasse Animalmit dem Namen mit einer nameEigenschaft namens und einer Methode sayHellonamens . Konstruktoren constructorwerden verwendet, um Eigenschaften einer Klasse zu initialisieren.

Objekt erstellen

Instanzen von Objekten können durch Klassen erstellt werden. Mit newdem Schlüsselwort eine Instanz einer Klasse erstellen und dann auf die Eigenschaften und Methoden des Objekts zugreifen. Nachfolgend finden Sie ein Beispiel:

const cat = new Animal("喵喵");
cat.sayHello(); // 输出:我是喵喵

Der obige Code erstellt cateine AnimalInstanz der aufgerufenen Klasse und ruft deren sayHelloMethode .

Klassenvererbung

Vererbung ist ein wichtiges Merkmal der objektorientierten Programmierung, die es uns ermöglicht, eine neue Klasse zu erstellen und Eigenschaften und Methoden von vorhandenen Klassen zu erben. In TypeScript können wir extendsdas Schlüsselwort um die Vererbung zu implementieren.

Erstellen wir eine CatKlasse , die von Animalder Klasse erbt:

class Cat extends Animal {
  // 可以添加 Cat 类特有的属性和方法
}

通过继承,Cat 类继承了 Animal 类的属性和方法,我们还可以在 Cat 类中添加特定于猫的属性和方法。

方法的重写

在子类中,我们可以重写从父

类继承而来的方法,以实现子类特有的行为。在 TypeScript 中,我们可以使用 super 关键字来调用父类的方法。

class Cat extends Animal {
  sayHello() {
    super.sayHello(); // 调用父类的 sayHello 方法
    console.log("喵喵");
  }
}

上面的代码中,Cat 类重写了 sayHello 方法,并在方法中使用 super.sayHello() 调用了父类 AnimalsayHello 方法。这样,子类可以在继承父类方法的基础上添加自己的行为。

访问修饰符

在类中,我们可以使用访问修饰符来控制属性和方法的访问权限。TypeScript 提供了三种访问修饰符:publicprivateprotected

  • public:公共的,可以在类的内部和外部访问。
  • private:私有的,只能在类的内部访问。
  • protected:受保护的,可以在类的内部和派生类中访问。

默认情况下,类的属性和方法是 public 访问修饰符。

class Animal {
  public name: string;
  private age: number;
  protected color: string;
}

上面的代码中,name 属性是公共的,age 属性是私有的,color 属性是受保护的。

抽象类

抽象类是一种不能直接实例化的类,它只能用作其他类的基类。抽象类可以包含抽象方法和具体方法的实现。

在 TypeScript 中,我们可以使用 abstract 关键字来定义抽象类和抽象方法。

abstract class Animal {
  abstract makeSound(): void;

  move(): void {
    console.log("动物在移动");
  }
}

上面的代码中,Animal 类是一个抽象类,它有一个抽象方法 makeSound 和一个具体方法 move。抽象方法没有具体的实现,而是由派生类来实现。

接口实现

接口是一种描述对象的形状的方式,它定义了对象应该具有的属性和方法。在 TypeScript 中,我们可以使用接口来实现类的约束。

interface Shape {
  calculateArea(): number;
}

class Circle implements Shape {
  radius: number;

  constructor(radius: number) {
    this.radius = radius;
  }

  calculateArea() {
    return Math.PI * this.radius * this.radius;
  }
}

上面的代码中,Shape 是一个接口,它定义了一个 calculateArea 方法。Circle 类实现了 Shape 接口,并提供了具体的实现。

类进阶

在前面的内容中,我们介绍了 TypeScript 中类的基本概念和用法。现在,让我们深入一些探索更多关于类的特性和技巧。

类型注解

TypeScript 中的类型注解是一种在变量、参数和返回值上标注类型的方式。通过类型注解,我们可以让代码更加清晰明了,并在编译阶段捕获一些潜在的错误。

在类中,我们可以使用类型注解来声明属性的类型和方法的参数类型以及返回值类型。

class Circle {
  radius: number;

  constructor(radius: number) {
    this.radius = radius;
  }

  calculateArea(): number {
    return Math.PI * this.radius * this.radius;
  }
}

上面的代码中,radius 属性和 calculateArea 方法都使用了类型注解,明确了它们的类型。

类型推断

TypeScript 的类型系统具有类型推断的能力,它可以根据上下文自动推断出表达式的类型。在类中,如果我们没有显式地声明类型,TypeScript 会根据赋值语句自动推断出属性的类型。

class Circle {
  radius = 0; // 类型推断为 number

  constructor(radius: number) {
    this.radius = radius;
  }
}

上面的代码中,我们没有显式地声明 radius 的类型,但 TypeScript 会根据赋值语句自动推断出它的类型为 number

泛型类

泛型是一种在代码中使用类型参数的方式,它增强了代码的灵活性和重用性。在 TypeScript 中,我们可以使用泛型来创建泛型类。

让我们来看一个简单的例子,实现一个泛型的堆栈类:

class Stack<T> {
  private items: T[] = [];

  push(item: T) {
    this.items.push(item);
  }

  pop(): T {
    return this.items.pop();
  }
}

上面的代码中,Stack 类使用了类型参数 T,用于表示堆栈中的元素类型。这样,我们可以在使用 Stack 类时指定元素的具体类型。

类型别名

类型别名是一种给类型起别名的方式,它可以简化复杂类型的表达。在类中,我们可以使用类型别名来定义复杂的属性类型或方法参数类型。

type Point = {
  x: number;
  y: number;
};

class Shape {
  position: Point;

  constructor(position: Point) {
    this.position = position;
  }
}

Im obigen Code Pointhandelt es sich um einen Typalias, der zur Darstellung xeines yPunkts mit und-Attributen verwendet wird. ShapeDie positionEigenschaft verwendet Pointden Typalias.

Klassendekorateur

Ein Klassendekorator ist eine spezielle Art von Deklaration, die zum Dekorieren einer Klasse verwendet wird. Er kann vor der Klassendeklaration deklariert und auf den Konstruktor der Klasse angewendet werden. Klassendekoratoren können verwendet werden, um das Verhalten oder die Metadaten einer Klasse zu ändern.

function logClass(target: any) {
  console.log

(`类 ${target.name} 被装饰了`);
}

@logClass
class MyClass {
  // 类的定义
}

Im obigen Code logClasshandelt es sich um eine Klassendekoratorfunktion, die beim Deklarieren der Klasse aufgerufen wird und den Namen der Klasse ausgibt.

Zusammenfassen

Durch diesen Artikel haben wir ein tiefes Verständnis des Konzepts und der Verwendung von Klassen in TypeScript gewonnen. Wir haben gelernt, wie man Klassen definiert, Objekte erstellt, Methoden erbt und überschreibt sowie Zugriffsmodifikatoren, abstrakte Klassen und Schnittstellenimplementierungen verwendet. Wir haben uns auch erweiterte Funktionen wie Typanmerkungen und Typinferenz, generische Klassen, Typaliase und Klassendekoratoren angesehen.

Durch den Einsatz von Klassen und objektorientiertem Programmierdenken können wir Front-End-Code mit klarer Struktur und hoher Wartbarkeit schreiben.

Wenn Sie weitere Fragen zu Klassen in TypeScript haben oder mehr erfahren möchten, schauen Sie sich bitte die offizielle TypeScript-Dokumentation und die zugehörigen Tutorials an.

Verweise:

Der Beispielcode dient nur der Veranschaulichung von Konzepten und entspricht möglicherweise nicht den Best Practices. Bitte passen Sie die tatsächliche Entwicklung entsprechend der spezifischen Situation an.

Ich denke du magst

Origin juejin.im/post/7245948253492576293
Empfohlen
Rangfolge