TypeScript是一种由微软开发的开源编程语言,它构建在JavaScript的基础上,增加了静态类型系统。TypeScript的类型系统对于编写健壮、易于维护的代码至关重要。本文将带你从基础类型开始,逐步深入到复杂泛型的使用,让你能够更好地掌握TypeScript的类型系统。

基础类型

TypeScript提供了丰富的内置类型,这些类型是所有TypeScript开发者应该熟悉的:

布尔类型(Boolean)

布尔类型表示逻辑值,只有truefalse两个值。

let isDone: boolean = false;

数字类型(Number)

数字类型用于表示整数和浮点数。

let age: number = 26;
let pi: number = 3.14159;

字符串类型(String)

字符串类型用于表示文本。

let message: string = "Hello, TypeScript!";

字符类型(Character)

字符类型是字符串的一个子集,表示单个字符。

let letter: string = 'A';

任意类型(Any)

任意类型允许你分配任何类型的值给变量。

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

数组类型(Array)

数组类型表示一组元素的集合。

let list: number[] = [1, 2, 3];
let list2: Array<number> = [1, 2, 3];

元组类型(Tuple)

元组类型允许你声明一个已知元素数量和类型的数组。

let x: [string, number];
x = ["Hello", 10]; // OK
x = [10, "Hello"]; // Error

枚举类型(Enum)

枚举类型允许你声明一组命名的数字常量。

enum Color {
    Red,
    Green,
    Blue
}
let c: Color = Color.Green;

void类型

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

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

null和undefined

null和undefined类型表示缺失的值。

let u: undefined = undefined;
let n: null = null;

接口

接口是一种类型定义,它描述了一个对象应有的结构。

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

let tom: Person = {
    name: "Tom",
    age: 26
};

类是TypeScript中用于创建对象的结构。

class Person {
    name: string;
    age: number;

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

let tom = new Person("Tom", 26);

泛型

泛型是一种在编程语言中允许你在不知道具体数据类型的情况下操作数据类型的机制。

基础泛型

基础泛型通常使用一个类型变量T来定义。

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

复杂泛型

复杂泛型可以处理更复杂的情况,比如多类型参数、条件类型等。

多类型参数

function swap<T, U>(tuple: [T, U]): [U, T] {
    return [tuple[1], tuple[0]];
}

条件类型

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

总结

TypeScript的类型系统为开发者提供了一种强大的工具,可以确保代码的准确性和可维护性。从基础类型到复杂泛型,TypeScript的类型系统具有丰富的功能。通过掌握这些类型,你可以写出更加安全、可靠的TypeScript代码。