TypeScript 类型系统:元组、枚举与类型转换

TypeScript 提供了丰富的类型系统,本文将阐述元组、枚举、联合类型及类型转换等多个方面。

1. 元组(Tuple)

1.1 元组概述

元组是 TypeScript 中的一种特殊数据结构,用于表示已知数量和类型的元素集合。与数组不同,元组中的元素类型可以不同。

1.2 创建元组
let person: [string, number] = ["Alice", 30];
  • 第一个元素是字符串类型,第二个元素是数字类型。
  • 元组可以通过索引访问其元素:
console.log(person[0]); // 输出: "Alice"
console.log(person[1]); // 输出: 30

2. 枚举类型(Enum)

2.1 枚举概述

枚举是一种用于定义命名常量集合的数据类型,能够让代码更加清晰可读。

2.2 数字枚举
enum Direction {
  Up = 1,
  Down,
  Left,
  Right
}
console.log(Direction.Up);   // 输出: 1
console.log(Direction.Right); // 输出: 4
2.3 字符串枚举
enum Colors {
  Red = "RED",
  Green = "GREEN",
  Blue = "BLUE"
}
console.log(Colors.Red); // 输出: "RED"

3. unknown 类型

3.1 unknown 概述

unknown 表示未知类型,是 TypeScript 中最安全的顶级类型之一。

3.2 使用示例
let value: unknown;

value = "Hello";
value = 123;

if (typeof value === "string") {
  console.log(value.toUpperCase()); // 确保类型是 string 后才可以调用 string 方法
}

4. any 类型

4.1 any 概述

any 类型可以表示任意类型的值,但会跳过类型检查,因此使用时要谨慎。

4.2 示例
let anything: any = "Hello World";
anything = 42;
console.log(anything.toFixed(2)); // 42.00

注意:相比 any 类型,unknown 更加安全,因为它要求明确的类型检查。

5. Null 和 undefined 类型

5.1 概述
  • null:表示一个明确为空的值。
  • undefined:表示一个变量已声明但未初始化。
5.2 示例
let value1: null = null;
let value2: undefined = undefined;

6. 联合类型

6.1 联合类型概述

联合类型允许一个变量接受多种类型的值。

6.2 使用示例
let id: number | string;
id = 123;  // 可以是数字
id = "ABC"; // 也可以是字符串
6.3 联合类型的类型保护
function printId(id: number | string) {
  if (typeof id === "number") {
    console.log(`数字ID: ${id}`);
  } else {
    console.log(`字符串ID: ${id}`);
  }
}

7. 类型转换

7.1 类型断言

类型断言可以显式地告诉 TypeScript 变量的具体类型。

let someValue: unknown = "Hello TypeScript";
let strLength: number = (someValue as string).length;
console.log(strLength); // 输出: 15
7.2 使用 <> 语法
let anotherValue: unknown = "TypeScript";
let length: number = (<string>anotherValue).length;
7.3类型转换函数

TypeScript提供了一些内置的类型转换函数:

  • parseInt():将字符串转换为整数

  • parseFloat():将字符串转换为浮点数

  • toString():将其他类型转换为字符串

  • Number():将其他类型转换为数字

  • Boolean():将其他类型转换为布尔值

  • String():将其他类型转换为字符串

    // 类型转换函数示例
    let strNumber: string = "123";
    let num1: number = parseInt(strNumber);
    let num2: number = Number(strNumber);
    let booleanValue: boolean = Boolean(strNumber);
    let strValue: string = String(num1);
    console.log(num1); // 输出:123
    console.log(num2); // 输出:123
    console.log(booleanValue); // 输出:true
    console.log(strValue); // 输出:"123"
    

凡是过去,皆为序章;凡是未来,皆有可期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值