TypeScript switch 语句

注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。


TypeScript switch...case 语句根据给定表达式的值执行不同的代码块。

这是一个简单的 switch...case 语句的例子。您可以阅读其余的教程以了解更多信息。

示例

let trafficLight: string = "green";
let message: string = ""
 
switch (trafficLight) {
    case "red":
        message = "Stop immediately.";
        break;
    case "yellow":
        message = "Prepare to stop.";
        break;
    case "green":
        message = "Proceed or continue driving.";
        break;
    default:
        message = "Invalid traffic light color.";
}
 
console.log(message)
 
// Output: Proceed or continue driving.

上面的程序检查 trafficLight 的值并打印其相应的含义。如果值与任何指定的 case 不匹配,则打印 无效的交通灯颜色。


switch...case 语句的语法

switch (expression) {

    case value1:
        // Code block to be executed
        // if expression matches value1
        break;

    case value2:
        // Code block to be executed
        // if expression matches value2
        break;

    ...

    default:
        // Code block to be executed
        // if expression doesn't match any case
}

这里,

  1. switch 语句首先评估 expression
  2. 之后,它将结果与 value1 进行比较。如果找到匹配项,则执行相应的代码块。然后,break 语句会立即停止对其他 case 的进一步检查。
  3. 如果没有 value1 的匹配项,程序将结果与下一个指定的 case 值(value2)进行比较。此过程将继续进行,直到找到匹配的 case 为止。
  4. 如果没有任何 case 值匹配,则执行 default 块中的代码。

让我们通过下面的流程图来理解这个过程。


switch 语句的流程图

Flowchart of TypeScript switch statement
TypeScript switch 语句的流程图

示例 1:使用 switch...case 的简单程序

假设我们想根据一周中的当前日期显示一条消息。让我们看下面的例子,了解如何使用 switch...case 来实现这一点。

let day: number = 3; 

switch (day) {

    case 1:
        console.log("Sunday");
        break;

    case 2:
        console.log("Monday");
        break;

    case 3:
        console.log("Tuesday");
        break;

    case 4:
        console.log("Wednesday");
        break;

    case 5:
        console.log("Thursday");
        break;

    case 6:
        console.log("Friday");
        break;

    case 7:
        console.log("Saturday");
        break;

    default:
        console.log("Invalid Day");
}

输出

Tuesday

此程序根据 day 变量中存储的数字打印日期(1 代表 Sunday2 代表 Monday,依此类推)。

在这里,switch 语句将 day 的值与一系列 case 进行比较

  1. 首先,它将 daycase 1 进行比较。由于不匹配,此 case 被跳过。
  2. 接下来,它将 daycase 2 进行比较。由于不匹配,此 case 被跳过。
  3. 然后,它将 daycase 3 进行比较。由于存在匹配项,因此执行其代码块(打印 Tuesday)。
  4. 打印 Tuesday 后,遇到 break 语句,该语句终止 switch 语句。

注意:由于 TypeScript 的严格类型检查,您不能用其他类型的 case 值来检查一种类型的变量/表达式。例如,

let day: number = 3; 

switch (day) {

    // Error due to comparison between number variable and string literal
    case "1":
        console.log("Sunday");
        break;

    ... ... ...
}

示例 2:使用 switch...case 的简单计算器

// Take user input for first number
let userInput: string | null = prompt("Enter the value of number1: ");
const number1: number = Number(userInput);

// Take user input for second number
userInput = prompt("Enter the value of number2: ");
const number2 = Number(userInput);

// Take user input to select an operator
const operator: string | null = prompt("Enter an operator ( either +, -, * or / ): ");

// Variable to store the result of calculation
let result: number;

switch(operator) {

    case "+":
        result = number1 + number2;
        console.log(`${number1} + ${number2} = ${result}`);
        break;

    case "-":
        result = number1 - number2;
        console.log(`${number1} - ${number2} = ${result}`);
        break;

    case "*":
        result = number1 * number2;
        console.log(`${number1} * ${number2} = ${result}`);
        break;

    case "/":
        result = number1 / number2;
        console.log(`${number1} / ${number2} = ${result}`);
        break;

    default:
        console.log("Invalid operator");
}

示例输出 1

Enter the value of number1: 6
Enter the value of number2: 3
Enter an operator ( either +, -, * or / ): *
6 * 3 = 18

示例输出 2

Enter the value of number1: 6
Enter the value of number2: 3
Enter an operator ( either +, -, * or / ): +
6 + 3 = 9

在上面的程序中,我们提示用户

  • 输入两个数字:number1number2
  • 选择一个运算符:+-*/

根据用户输入,switch 语句执行相应的计算。

注意:在这里,我们使用了模板字面量 `${number1} + ${number2} = ${result}`,它将文本和变量合并到一个字符串中。

它直接在消息中显示 number1number2result 的值,例如 5 + 3 = 8。要了解有关模板字面量的更多信息,请访问 TypeScript 模板字面量


更多关于 TypeScript switch 语句

default case 是可选的。

在 TypeScript 中不必使用 default case。例如,

let country: string = "Nepal";

switch (country) {
    case "USA":
        console.log("American");
        break;
    case "UK":
        console.log("British");
        break;
    case "Japan":
        console.log("Japanese");
}

console.log("Code after switch statement")

// Output: Code after switch statement

我们在上面的程序中没有使用 default case。此外,country 变量的值与 switch 语句中的任何 case 都不匹配。

在这种情况下,switch 语句将被完全跳过,程序流程将转到 switch 语句主体之后的行。

不使用 break 使用 switch 语句时会发生什么?

到目前为止,我们在每个 case 块中都使用了 break 语句。例如,

case 2:
    console.log("Monday");
    break;

break 语句在找到匹配的 case 后会终止 switch 语句的执行。

如果没有 break,程序将在找到匹配项后继续执行后续的 case。例如,

let fruit: string = "banana";

switch (fruit) {
    case "apple":
        console.log("Apple case");
    case "banana":
        console.log("Banana case");
    case "orange":
        console.log("Orange case");       
    default:
        console.log("Unknown fruit");
}

输出

Banana case
Orange case
Unknown fruit
如何为多个 case 值使用一个代码块?

有时,我们可能希望多个 case 值触发相同的代码块。为此,我们可以使用具有单个代码块的多个 case。

让我们看一个例子来清楚地理解这一点。

// Program to categorize age

let age: number = 19;

switch (age) {

    // When age is 13, 14, or 15
    case 13:
    case 14:
    case 15:
        console.log("Early Teen")
        break;

    // When age is 16 or 17
    case 16:
    case 17:
        console.log("Mid Teen");
        break;

    // When age is 18 or 19
    case 18:
    case 19:
        console.log("Late Teen");
        break;

    // When age is none of the above
    default:
        console.log("Other Age Group");
}

输出

Late Teen

在此程序中,我们将多个 case 分组在一起,这允许我们为组中的所有 case 使用一个代码块。这些组是

  • case 13、14 和 15 - 在屏幕上打印 Early Teen
  • case 16 和 17 - 在屏幕上打印 Mid Teen
  • case 18 和 19 - 在屏幕上打印 Late Teen

由于 19 匹配第三组中的第二个 casecase 19),因此输出打印 Late Teen

switch 语句和 if...else 语句之间的比较。

switch...caseif...else 语句都用于决策。但是,它们在不同的条件下很有用

  • switch - 当基于同一表达式检查大量条件时使用它,这比 if...else 更具可读性。
  • if...else - 用于无法轻松表示为离散 case 的复杂逻辑条件。

让我们看两个执行相同任务的程序,一个使用 switch 语句,另一个使用 if...else

// Program using switch statement 

let color: string = "green";

switch (color) {
    case "red":
        console.log("Stop");
        break;
    case "yellow":
        console.log("Caution");
        break;
    case "green":
        console.log("Go");
        break;
    default:
        console.log("Invalid color");
}

// Output: Go

在上面的程序中,将 color 变量与每个 case 进行比较。当它匹配 "green" case 时,输出打印 Go

// Program using if...else statement

let color: string = "green";

if (color === "red") {
    console.log("Stop");
}
else if (color === "yellow") {
    console.log("Caution");
}
else if (color === "green") {
    console.log("Go");
}
else {
    console.log("Invalid color");
}

// Output: Go

在这里,if...else 语句将 color 的值与各种条件进行比较。

color 匹配 "green" 时,执行相应的块,输出打印 Go


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战