返回

TypeScript 面向对象的另一面:深入探究可选、剩余和重载

前端

TypeScript 面向对象:从可选参数到泛型

踏上 TypeScript 面向对象之旅,我们探索了类和接口的领域。现在,让我们深入了解一些鲜为人知的但同样强大的特性,它们将提升你的代码技能。

可选参数和默认参数

想象一个计算两个数字之和的函数。通常,我们需要两个参数,但如果其中一个可以省略呢?TypeScript 引入了可选参数。

function sum(num1: number, num2?: number): number {
  if (num2) {
    return num1 + num2;
  }
  return num1;
}

num2 是可选参数,可以传递或省略。如果没有传递,函数返回第一个数字。

默认参数与可选参数类似,但它们提供一个默认值,用于未提供参数时。

function greet(name: string, message = "Hello"): string {
  return `${message} ${name}!`;
}

message 参数的默认值为 "Hello"。如果没有提供 message,函数使用默认值。

剩余参数

有时,我们想要处理不定数量的参数。这就是剩余参数的用武之地。它们用三个点 (...) 表示。

function sumAll(...numbers: number[]): number {
  let total = 0;
  for (const num of numbers) {
    total += num;
  }
  return total;
}

sumAll 接受任意数量的数字参数,并返回它们的总和。

重载

重载允许同一个函数拥有多个签名。这在处理不同类型或数量的参数时非常有用。

function formatName(name: string): string;
function formatName(firstName: string, lastName: string): string;

function formatName(nameOrFirstName: string, lastName?: string): string {
  if (lastName) {
    return `${nameOrFirstName} ${lastName}`;
  }
  return nameOrFirstName;
}

formatName 函数被重载,有两个签名:一个用于单个字符串参数,另一个用于两个字符串参数。

泛型

泛型是一种创建可重用代码的强大机制,无论数据类型如何。

function identity<T>(value: T): T {
  return value;
}

identity 函数是一个泛型函数,接受一个类型参数 T。它返回与输入值相同类型的值。

内置对象

TypeScript 提供了丰富的内置对象,例如 ArrayObjectMath。这些对象提供了常用的功能,简化了编码。

const numbers = [1, 2, 3, 4, 5];
console.log(numbers.length); // 输出: 5

numbers 是一个数组对象,我们可以使用 length 属性获取其长度。

结语

可选参数、默认参数、剩余参数、重载、泛型和内置对象是 TypeScript 面向对象开发中的宝贵工具。熟练掌握这些概念可以让你编写更灵活、更可重用的代码。继续你的 TypeScript 之旅,探索模块、命名空间和装饰器等其他激动人心的特性。

常见问题解答

  1. 什么是可选参数?
    可选参数允许你创建可以省略的参数。

  2. 如何为参数提供默认值?
    使用默认参数语法:function foo(param = defaultValue)

  3. 剩余参数有什么作用?
    剩余参数允许你处理不定数量的参数。

  4. 为什么要使用重载?
    重载允许同一个函数具有多个签名,用于处理不同类型或数量的参数。

  5. 泛型有什么好处?
    泛型创建可重用代码,无论数据类型如何。