在当今的软件开发领域,TypeScript 作为 JavaScript 的超集,已经成为了一种非常流行的编程语言。它为 JavaScript 带来了静态类型检查,使得代码更加健壮和易于维护。TypeScript 的类型系统是其核心特性之一,理解并掌握 TypeScript 类型系统对于开发者来说至关重要。

基础类型

TypeScript 的基础类型包括:

  • 布尔型 (boolean):表示真或假。
  • 数字型 (number):表示整数或浮点数。
  • 字符串型 (string):表示文本。
  • null 和 undefined:表示变量未定义或为空。
  • any:表示任何类型。

示例:

let isDone: boolean = false;
let age: number = 26;
let name: string = "John Doe";
let undefinedVar: undefined;
let nullVar: null;
let anyVar: any;

接口和类型别名

接口(Interface)和类型别名(Type Alias)是 TypeScript 中定义类型的方式。

接口

接口是一种约束,它指定了对象必须具有的属性和方法。

interface Person {
  name: string;
  age: number;
}

let john: Person = {
  name: "John",
  age: 26
};

类型别名

类型别名提供了更为灵活的命名方式。

type PersonType = {
  name: string;
  age: number;
};

let john: PersonType = {
  name: "John",
  age: 26
};

数组类型

在 TypeScript 中,你可以使用数组类型来指定数组中元素的数据类型。

let numArray: number[] = [1, 2, 3];
let strArray: string[] = ["a", "b", "c"];

你也可以使用泛型来创建灵活的数组类型。

let numArray: Array<number> = [1, 2, 3];
let strArray: Array<string> = ["a", "b", "c"];

函数类型

TypeScript 允许你定义函数类型,包括函数的参数和返回类型。

function greet(name: string): string {
  return "Hello, " + name;
}

let greetMessage: (name: string) => string = (name) => "Hello, " + name;

类类型

类(Class)是面向对象编程中的基础,TypeScript 也提供了类类型。

class Greeter {
  constructor(message: string) {
    this.greeting = message;
  }

  greet() {
    return "Hello, " + this.greeting;
  }
}

let greeter = new Greeter("world");
console.log(greeter.greet());

高级类型

TypeScript 还提供了许多高级类型,如联合类型、交叉类型、映射类型、条件类型和泛型。

联合类型

联合类型允许你声明一个变量可以具有多种类型中的一种。

let isDone: boolean | string = true;

交叉类型

交叉类型将多个类型合并为一个新的类型。

interface Alarm {
  price: number;
}

interface Door {
  width: number;
}

let someDoor: Alarm & Door = {
  price: 100,
  width: 80
};

映射类型

映射类型允许你复制一个类型并修改它的属性。

type Stringify<T> = {
  [P in keyof T]: string;
};

let person: Stringify<{ name: number; age: number }> = {
  name: "John",
  age: 26
};

条件类型

条件类型允许你基于条件表达式返回不同类型。

type StringToNumber<T> = T extends string ? number : T;

let num: StringToNumber<string> = "123"; // num 的类型为 number

泛型

泛型允许你编写可重用的代码,同时保持类型安全。

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

let output = identity<string>("myString"); // output 的类型为 string

总结

TypeScript 类型系统为开发者提供了强大的工具,以确保代码的健壮性和可维护性。通过理解基础类型、接口、类型别名、数组类型、函数类型、类类型以及高级类型,你可以更加有效地使用 TypeScript。掌握 TypeScript 类型系统不仅能够提高你的代码质量,还能让你的开发过程更加顺畅。