TypeScript 是一种超集于 JavaScript 的语言,它在 JavaScript 的基础上添加了静态类型检查和面向对象编程(OOP)的特性。在本文中,将学习如何在 TypeScript 中定义类和创建类的实例。
在 TypeScript 中,可以使用面向对象编程的概念来创建类。就像 C# 和其他面向对象编程语言一样,可以使用 class 关键字来定义一个类。让考虑以下示例:
        class Person {
            // 属性
            firstName: string;
            lastName: string;
            // 默认构造函数
            constructor() {
            }
            // 参数化构造函数
            constructor(fName: string, lName: string) {
                this.firstName = fName;
                this.lastName = lName;
            }
            // 方法
            getFullName(): string {
                return `${this.firstName} ${this.lastName}`;
            }
        }
    
在上面的示例中,Person 类有四个成员:两个属性(firstName, lastName),两个类构造函数(constructor)和一个方法(getFullName)。要访问类的成员,可以使用 this 操作符。例如,this.firstName,this.getFullName() 等。
默认情况下,TypeScript 类中的所有成员都是 public 的。这等同于使用 public 访问修饰符标记成员为 public。上述类可以按如下方式重写,明确标记成员为 public:
        class Person {
            // 属性
            public firstName: string;
            public lastName: string;
            // 默认构造函数
            constructor() {
            }
            // 构造函数
            public constructor(fName: string, lName: string) {
                this.firstName = fName;
                this.lastName = lName;
            }
            // 方法
            public getFullName(): string {
                return `${this.firstName} ${this.lastName}`;
            }
        }
    
一个类可以有两种类型的构造函数:默认构造函数和参数化构造函数。在上面的示例中,第一个构造函数是默认构造函数,它不接受任何参数。第二个是参数化构造函数,它接受一个或多个参数值(在例子中,它接受两个输入):
        // 默认构造函数
        constructor() {
        }
        // 参数化构造函数
        public constructor(fName: string, lName: string) {
            this.firstName = fName;
            this.lastName = lName;
        }
    
在上面的示例中,首先定义了属性,然后使用参数化构造函数传递值,然后填充这些属性。TypeScript 支持自动属性创建。如果将构造函数参数定义为 public,TypeScript将为完成其余的工作。
考虑以下示例,展示了如何使用参数化构造函数定义属性:
        class Person {
            // 参数化构造函数
            constructor(public firstName: string, public lastName: string) {
            }
            // 方法
            getFullName(): string {
                return `${this.firstName} ${this.lastName}`;
            }
        }
    
        let person: Person = new Person("Kunal", "Chowdhury");
        console.log(person.getFullName());
        // 另一种方式
        let person = new Person("Kunal", "Chowdhury");
        console.log(person.getFullName());