返回

TypeScript 基础知识第二讲:函数规范、类

前端

在本文中,我们将继续深入探究 TypeScript 的基础知识,重点关注函数规范和类。我们将详细介绍 TypeScript 函数和类的语法、特点和用法,帮助你更好地理解和使用 TypeScript 构建更强大的应用程序。

函数规范

在 TypeScript 中,函数是代码执行的单元,它可以包含一系列语句,用于执行特定的任务或计算结果。TypeScript 提供了丰富的函数语法和规范,使您可以根据需要灵活地定义和使用函数。

1. 函数定义

在 TypeScript 中,函数的定义与 JavaScript 非常相似。您可以使用以下语法定义函数:

function functionName(parameters): returnType {
  // 函数体
}

其中:

  • functionName:函数名称。
  • parameters:函数参数,可以有多个,用逗号分隔。
  • returnType:函数的返回类型,可以是任何 TypeScript 类型。
  • 函数体:函数内部执行的代码块。

例如:

function sum(a: number, b: number): number {
  return a + b;
}

这个函数接收两个数字参数 ab,返回这两个数字的和。

2. 函数类型注解

在 TypeScript 中,您可以为函数的参数和返回值添加类型注解,以帮助编译器更好地理解函数的意图和行为。类型注解可以放在参数名后面或函数名前面。

例如:

function sum(a: number, b: number): number {
  return a + b;
}

在这个例子中,我们为 ab 参数添加了 number 类型注解,并为函数的返回值添加了 number 类型注解。这告诉编译器,这个函数接收两个数字参数并返回一个数字。

3. 可选参数和默认参数

在 TypeScript 中,您可以定义可选参数和默认参数。可选参数是指可以不传递值的函数参数,默认参数是指在函数调用时没有传递值时使用的参数值。

例如:

function greet(name: string, message?: string) {
  if (message) {
    console.log(`Hello, ${name}, ${message}`);
  } else {
    console.log(`Hello, ${name}`);
  }
}

在这个例子中,name 参数是必需的,而 message 参数是可选的。如果没有传递 message 参数,则函数将打印"Hello, " + name

4. 剩余参数

在 TypeScript 中,您可以使用剩余参数来接收任意数量的额外参数。剩余参数必须是函数的最后一个参数,并且必须使用 ... 操作符来声明。

例如:

function sum(...numbers: number[]) {
  let total = 0;
  for (let i = 0; i < numbers.length; i++) {
    total += numbers[i];
  }
  return total;
}

在这个例子中,...numbers 参数接收任意数量的数字参数,并将其存储在 numbers 数组中。然后,函数计算这些数字的总和并返回结果。

在 TypeScript 中,类是一种数据类型,它可以创建对象的实例。类包含属性(字段)和方法,用于和操作对象。

1. 类定义

在 TypeScript 中,您可以使用以下语法定义类:

class ClassName {
  // 属性
  property: type;

  // 构造函数
  constructor(parameters) {
    // 构造函数体
  }

  // 方法
  methodName(parameters): returnType {
    // 方法体
  }
}

其中:

  • ClassName:类的名称。
  • 属性:类的属性,可以有多个,用分号分隔。
  • 构造函数:类的构造函数,用于初始化类的实例。
  • 构造函数参数:构造函数的参数,可以有多个,用逗号分隔。
  • 构造函数体:构造函数内部执行的代码块。
  • 方法:类的方法,可以有多个,用分号分隔。
  • 方法参数:方法的参数,可以有多个,用逗号分隔。
  • 方法返回类型:方法的返回类型,可以是任何 TypeScript 类型。
  • 方法体:方法内部执行的代码块。

例如:

class Person {
  name: string;
  age: number;

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

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

在这个例子中,Person 类有两个属性:nameage,以及一个方法:greet()

2. 类实例化

要创建类的实例,您可以使用以下语法:

let objectName = new ClassName(parameters);

例如:

let person = new Person('John Doe', 30);

这个代码将创建一个新的 Person 实例,并将 name 属性设置为 "John Doe"age 属性设置为 30

3. 类的继承

在 TypeScript 中,您可以使用 extends 来实现类的继承。子类可以继承父类的属性和方法,并可以扩展或覆盖父类的方法。

例如:

class Employee extends Person {
  salary: number;

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

  getSalary() {
    return this.salary;
  }
}

在这个例子中,Employee 类继承了 Person 类,并添加了新的属性 salary 和方法 getSalary()

4. 类接口

在 TypeScript 中,您可以使用接口来定义类的结构。接口包含类的属性和方法,但没有实现。接口可以用来约束类的行为,确保类具有