TypeScript 支持面向对象的术语

TypeScript 支持面向对象的术语

面向对象编程(OOP)是一种流行的编程范例,已经被广泛应用于软件开发行业。OOP基于对象的概念,对象是类的实例,封装数据和行为。TypeScript是JavaScript的静态类型的超集,旨在支持大规模应用程序的开发,并且也是一种面向对象的编程语言。在本文中,我们将探讨TypeScript支持的面向对象术语。

下面我们讨论TypeScript支持的各种面向对象术语。

在TypeScript中,类是创建对象的蓝图,定义了一组属性和方法,这些属性和方法对类的所有实例都是共享的。使用 class 关键字声明一个类,后面跟着类名和包含类定义的花括号。

语法

在TypeScript中声明类的语法如下:

class ClassName {
   // properties and methods
}

示例1

这里我们声明了一个 Car 类,包含 make、modelyear 属性以及它们对应的getter和setter方法。

class Car {
   private make: string;
   private model: string;
   private year: number;  
   constructor(make: string, model: string, year: number) {
      this.make = make;
      this.model = model;
      this.year = year;
   }  
   public getMake(): string {
      return this.make;
   }  
   public setMake(make: string): void {
      this.make = make;
   }  
   public getModel(): string {
      return this.model;
   }  
   public setModel(model: string): void {
      this.model = model;
   }  
   public getYear(): number {
      return this.year;
   }  
   public setYear(year: number): void {
      this.year = year;
   }
}

对象

在TypeScript中,一个对象是一个类的实例,它有自己的一组属性和方法。对象是使用 new 关键字创建的,后面跟着类名和类构造函数所需的参数。

语法

创建类实例(对象)的语法如下:

let objectName = new ClassName(arguments);

示例2

这创建了一个名为 myCar 的对象,其制造商为:Toyota,型号为:Camry,年份为:2022

let myCar = new Car('Toyota', 'Camry', 2022);
console.log(myCar.getMake(), myCar.getModel(), myCar.getYear());

构造函数

在TypeScript中,构造函数是一个特殊的方法,在从类创建对象时调用。构造函数用于使用默认值初始化对象。构造函数方法使用 constructor 关键字声明,后跟任何必要的参数。

语法

在TypeScript中编写构造函数的语法−

class ClassName {
   constructor(arguments) {
      // initialization code
   }
}

示例3

这个定义了一个构造函数,没有具体实现,有三个参数,分别是: make, modelyear

class Car {
   constructor(private make: string, private model: string, private year: number) {}
}

继承

在TypeScript中,继承是一种机制,允许一个类从另一个类继承属性和方法。从另一个类继承的类被称为子类或派生类,被继承的类被称为父类或基类。在TypeScript中,继承使用 extends 关键字声明。

语法

从父类创建一个子类的语法如下:

class SubclassName extends SuperclassName {
   // additional properties and methods
}

示例4

这里是子类: ElectricCar ,继承了父类: Car 的属性和方法。此外,它有自己的属性 range 和它的getter和setter方法,在父类中不存在。

class ElectricCar extends Car {
   private range: number;  
   constructor(make: string, model: string, year: number, range: number) {
      super(make, model, year);
      this.range = range;
   }
   public getRange(): number {
      return this.range;
   } 
   public setRange(range: number): void {
      this.range = range;
   }
}
const tesla = new ElectricCar("Tesla", "Model S", 2019, 300);
console.log(
   tesla.getMake(),
   tesla.getModel(),
   tesla.getYear(),
   tesla.getRange()
);

多态性

在TypeScript中,多态性是对象能够以多种形式或类型呈现的能力,允许将不同类的对象视为是公共类的对象。多态性通过继承和接口实现。下面是一个示例演示多态性。

示例5

这里,我们首先创建了一个接口 Shape ,它类似于TypeScript中的类。它有一个声明为 area 的方法。这个接口被实现了两次,一次是为 Circle 类,另一次是为 Rectangle 类。在这两个类中,我们定义了 area 函数的实现体,这两个实现体不同,但函数的名称完全相同。这展示了面向对象编程中的多态性(相同的名称但不同的形式)。

interface Shape {
   area(): number;
}

class Circle implements Shape {
   constructor(private radius: number) {}

   public area(): number {
      return Math.PI * this.radius ** 2;
   }
}

class Rectangle implements Shape {
   constructor(private width: number, private height: number) {}

   public area(): number {
      return this.width * this.height;
   }
}
let shapes: Shape[] = [new Circle(5), new Rectangle(10, 20)];
shapes.forEach(shape => console.log(shape.area()));

在编译时,它将生成以下JavaScript代码:

var Circle = /** @class */ (function () {
   function Circle(radius) {
      this.radius = radius;
   }
   Circle.prototype.area = function () {
      return Math.PI * Math.pow(this.radius, 2);
   };
   return Circle;
}());
var Rectangle = /** @class */ (function () {
   function Rectangle(width, height) {
      this.width = width;
      this.height = height;
   }
   Rectangle.prototype.area = function () {
      return this.width * this.height;
   };
   return Rectangle;
}());
var shapes = [new Circle(5), new Rectangle(10, 20)];
shapes.forEach(function (shape) { return console.log(shape.area()); });

输出

上述代码将产生以下输出−

78.53981633974483
200

接口

在TypeScript中,接口是用来创建对象的蓝图,定义了一组属性和方法,任何实现该接口的对象都必须实现这些属性和方法。接口使用 interface 关键字声明,后面跟着接口的名称和一对花括号,其中包含接口的定义。

语法

interface InterfaceName {
   // properties and methods
}

例子6

interface Person {
   firstName: string;
   lastName: string;
   age: number;
}

class Employee implements Person {
   constructor(public firstName: string, public lastName: string, public age: number, public jobTitle: string) {}
}

let Employee: Person = new Employee('John', 'Doe', 30, 'Software Engineer');
console.log(employee.firstName, employee.lastName, employee.age);

编译后,将生成以下JavaScript代码 –

var Employee = /** @class */ (function () {
   function Employee(firstName, lastName, age, jobTitle) {
      this.firstName = firstName;
      this.lastName = lastName;
      this.age = age;
      this.jobTitle = jobTitle;
   }
   return Employee;
}());
var employee = new Employee('John', 'Doe', 30, 'Software Engineer');
console.log(employee.firstName, employee.lastName, employee.age);

输出

上述代码将产生如下的输出 –

John Doe 30

在这里,我们定义了一个名为 Person 的接口,并通过一个名为 Employee 的类来实现这个接口。另外,我们通过在构造函数中传递参数来创建这个类的一个实例。

结论

总而言之,TypeScript对面向对象编程的支持使开发人员能够创建结构良好、易于维护的代码。该语言的功能,包括类、对象、继承、多态、接口等,使编写和维护复杂应用更加容易。因此,TypeScript已经成为构建Web应用的热门选择,特别是那些需要高度组织和结构的应用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

TypeScript 精选笔记