TypeScript是一种由微软开发的静态类型JavaScript的超集,它添加了可选的静态类型和基于类的面向对象编程到JavaScript中。类型系统是TypeScript的核心特性之一,它能够帮助开发者编写更安全、高效的代码。本文将从基础到进阶,详细讲解TypeScript的类型系统。

基础类型

TypeScript提供了丰富的基本数据类型,包括:

布尔型(Boolean)

let isDone: boolean = false;

数字型(Number)

let age: number = 26;

字符串型(String)

let name: string = "Alice";

任意类型(Any)

当不确定变量存储哪种类型的数据时,可以使用any类型。

let notSure: any = 4;
notSure = "maybe a string instead";

未定义类型(undefined)

undefined类型表示变量未定义。

let age: number;
console.log(age); // undefined

void类型

void类型表示没有任何返回值。

function sayHello(): void {
  console.log("Hello, world!");
}

接口(Interfaces)

接口用于定义对象的形状,可以指定对象必须包含哪些属性,以及属性的类型。

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

function greet(person: Person): void {
  console.log(`Hello, ${person.name}`);
}

const alice: Person = { name: "Alice", age: 26 };
greet(alice);

类(Classes)

类用于定义对象的属性和方法。

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  greet(): void {
    console.log(`Hello, my name is ${this.name}`);
  }
}

const alice = new Person("Alice", 26);
alice.greet();

泛型(Generics)

泛型允许你为类型创建参数,这样就可以重用代码并保持类型安全。

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

const output = identity<string>("myString"); // output: string

高级类型

联合类型(Union Types)

联合类型表示变量可以是几种类型中的一种。

let id: number | string;
id = 5; // OK
id = "hello"; // OK

类型别名(Type Aliases)

类型别名用于给类型创建一个别名。

type StringArray = Array<string>;
let strArray: StringArray;
strArray = ["Hello", "World"];

类型断言(Type Assertions)

类型断言用于告诉编译器某个变量应该具有的类型。

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

映射类型(Mapped Types)

映射类型用于从已有的类型创建新的类型。

type StringToNumber = {
  [P in string]: number;
};

let myValue: StringToNumber = {
  "length": 10,
};

总结

TypeScript的类型系统是一个强大的工具,可以帮助你编写更安全、高效的代码。通过掌握基础类型、接口、类、泛型等概念,你可以更好地利用TypeScript的类型系统来提升你的代码质量。希望本文能够帮助你从基础到进阶地理解TypeScript的类型系统。