TypeScript 是 JavaScript 的一个超集,它通过引入类型系统为 JavaScript 提供了类型检查、接口定义、模块化等功能。掌握 TypeScript 的类型系统对于构建健壮的代码架构至关重要。以下是一些关键点,帮助你深入了解 TypeScript 类型系统,并构建更加稳定的代码架构。

一、类型系统的基本概念

1. 基本类型

TypeScript 支持多种基本数据类型,如:

  • 布尔值(boolean)
  • 数字(number)
  • 字符串(string)
  • null 和 undefined
  • 枚举(enum)
let isDone: boolean = false;
let count: number = 10;
let name: string = "张三";
let undefinedValue: undefined = undefined;
let nullValue: null = null;
enum Color { Red, Green, Blue };
let c: Color = Color.Green;

2. 引用类型

TypeScript 支持引用类型,如数组、对象、函数等。

  • 数组
let list: number[] = [1, 2, 3];
let list2: Array<number> = [1, 2, 3];
  • 对象
interface Person {
  name: string;
  age: number;
}

let person: Person = {
  name: "李四",
  age: 20
};
  • 函数
function add(a: number, b: number): number {
  return a + b;
}

二、高级类型

1. 泛型

泛型允许你编写可重用的组件,并在使用时指定具体的类型。

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

let output = identity<string>("我的 TypeScript 类型系统");

2. 高级类型

TypeScript 提供了一些高级类型,如联合类型、交叉类型、索引签名等。

  • 联合类型
let result: string | number = 123;
result = "hello";
  • 交叉类型
interface A {
  a: string;
}

interface B {
  b: number;
}

let c: A & B = { a: "string", b: 123 };
  • 索引签名
interface StringArray {
  [index: number]: string;
}

let myArray: StringArray = ["Alice", "Bob", "Charlie"];

三、类型守卫

类型守卫是一种技术,用于在运行时检查变量的类型。

1. typeof 类型守卫

function isString(value: any): value is string {
  return typeof value === "string";
}

const value = "123";
if (isString(value)) {
  console.log(value.toUpperCase()); // 正确:value 被断言为 string
}

2. 程序员类型守卫

function isString(value: any): value is string {
  return typeof value === "string";
}

function example(value: any) {
  if (typeof value === "string") {
    // value 现在类型为 string
    console.log(value.toUpperCase());
  }
}

四、模块化

TypeScript 支持模块化,这使得代码更加模块化、可重用。

// 文件:module.ts
export function add(a: number, b: number): number {
  return a + b;
}

// 文件:main.ts
import { add } from "./module";

const result = add(1, 2);
console.log(result); // 3

五、总结

掌握 TypeScript 类型系统对于构建健壮的代码架构至关重要。通过了解基本类型、高级类型、类型守卫和模块化,你可以更好地利用 TypeScript 的优势,编写更加稳定、可维护的代码。希望这篇文章能帮助你更好地掌握 TypeScript 类型系统,并在实际项目中发挥其价值。