TypeScript 是 JavaScript 的一个超集,它通过引入类型系统来增强 JavaScript 的类型安全性。掌握 TypeScript 的类型系统,可以让你的 JavaScript 开发更加稳健,同时也能显著提升开发效率。下面,我们就来一招一式地学习 TypeScript 的类型系统,让你轻松提升 JavaScript 开发效率。

一、基础类型

TypeScript 提供了丰富的基础类型,包括:

  • 数字(number):表示数值类型。
  • 字符串(string):表示文本类型。
  • 布尔值(boolean):表示真或假。
  • 数组(array):表示一组有序的数据。
  • 元组(tuple):表示一个已知元素数量和类型的数组。
  • 枚举(enum):定义一组命名的数字常量。
  • 任意类型(any):表示可以赋值为任何类型的值。
  • 未知类型(unknown):表示任何类型,但类型检查器无法提供任何保证。
  • void:表示没有任何返回值。
  • null 和 undefined:表示空值。

示例:

let num: number = 10;
let str: string = "Hello, TypeScript!";
let bool: boolean = true;
let arr: number[] = [1, 2, 3];
let tuple: [string, number] = ["name", 18];
let enumValue: Role = Role.Admin;
let anyValue: any = "I can be anything!";
let unknownValue: unknown = 10;
let voidFunc(): void {};
let nullValue: null = null;
let undefinedValue: undefined = undefined;

二、接口(Interface)

接口用于定义对象的形状,它描述了一个对象必须有哪些属性和方法。

示例:

interface Person {
  name: string;
  age: number;
  sayHello(): string;
}

function greet(person: Person): void {
  console.log(person.name + " says hello!");
}

const person: Person = {
  name: "Alice",
  age: 25,
  sayHello(): string {
    return "Hello!";
  }
};

greet(person);

三、类型别名(Type Alias)

类型别名可以给一个类型起一个新名字,方便在其他地方使用。

示例:

type Role = "Admin" | "User" | "Guest";

function checkRole(role: Role): void {
  console.log(role);
}

checkRole("Admin"); // 输出:Admin

四、联合类型(Union Type)

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

示例:

function printId(id: string | number): void {
  console.log(id);
}

printId(123); // 输出:123
printId("456"); // 输出:456

五、交叉类型(Intersection Type)

交叉类型表示一个变量可以同时具有多种类型。

示例:

interface Animal {
  name: string;
}

interface Mammal {
  age: number;
}

type Dog = Animal & Mammal;

const dog: Dog = {
  name: "Buddy",
  age: 3
};

六、泛型(Generic)

泛型允许你在定义函数、接口和类时使用类型变量,从而实现类型参数化。

示例:

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

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

七、高级类型

TypeScript 还提供了高级类型,如键类型、映射类型、条件类型等。

示例:

type KeyOf<T> = keyof T;
type Person = {
  name: string;
  age: number;
};

const nameKey: KeyOf<Person> = "name"; // 类型为 "name" | "age"

总结

掌握 TypeScript 类型系统,可以让你的 JavaScript 开发更加稳健,同时也能显著提升开发效率。通过本文的学习,相信你已经对 TypeScript 类型系统有了初步的了解。在实际开发中,不断实践和总结,你将能够更好地运用 TypeScript 类型系统,让你的代码更加健壮、易维护。