TypeScript 的类型

中国世界杯足球 2025-12-30 07:32:12

在 TypeScript 中,类型用于定义变量、函数参数、返回值等的结构。以下是 TypeScript 中常见的类型及其相关概念:

1. 基本类型 (Primitive Types)

这些类型用于定义最基础的数据结构:

number: 数字类型,支持整数和浮点数。

typescriptCopy Code

let age: number = 30;

let price: number = 99.99;

string: 字符串类型。

typescriptCopy Code

let name: string = "John";

let message: string = `Hello, ${name}`;

boolean: 布尔值类型,只有 true 和 false 两个值。

typescriptCopy Code

let isActive: boolean = true;

null: 空值类型,表示无值。

typescriptCopy Code

let value: null = null;

undefined: 未定义类型,表示一个变量未被赋值时的默认状态。

typescriptCopy Code

let value: undefined = undefined;

symbol: ES6 引入的一种新的基本数据类型,表示唯一的值。

typescriptCopy Code

let sym: symbol = Symbol('description');

bigint: 支持大整数类型,适用于大于 2^53 - 1 或小于 -2^53 + 1 的整数。

typescriptCopy Code

let bigNum: bigint = 1234567890123456789012345678901234567890n;

2. 对象类型 (Object Types)

object: 表示一个非原始类型,通常用于定义对象的结构。

typescriptCopy Code

let obj: object = { name: 'John', age: 30 };

对象字面量类型: 可以显式地定义对象的结构。

typescriptCopy Code

let person: { name: string, age: number } = { name: 'Alice', age: 25 };

3. 数组类型 (Array Types)

Array: 定义元素类型相同的数组。

typescriptCopy Code

let numbers: Array = [1, 2, 3];

type[]: 另一种数组的写法,等同于 Array

typescriptCopy Code

let names: string[] = ['Alice', 'Bob', 'Charlie'];

4. 元组类型 (Tuple Types)

元组是一种已知元素数量和类型的数组。

typescriptCopy Code

let tuple: [string, number] = ['Alice', 30];

元组支持不同类型的元素,但要求严格按位置和类型定义。

5. 函数类型 (Function Types)

函数类型用于描述函数的参数和返回值类型。

typescriptCopy Code

let add: (a: number, b: number) => number = (a, b) => a + b;

6. 联合类型 (Union Types)

联合类型允许一个变量拥有多个类型。

typescriptCopy Code

let value: string | number = "Hello";

value = 42; // 也可以是数字

7. 交叉类型 (Intersection Types)

交叉类型用于组合多个类型,表示一个变量同时具有多个类型。

typescriptCopy Code

type A = { name: string };

type B = { age: number };

type C = A & B;

let person: C = { name: "Alice", age: 30 };

8. 字面量类型 (Literal Types)

字面量类型指的是使用特定的值作为类型,例如:特定的字符串、数字等。

typescriptCopy Code

let direction: "left" | "right" = "left";

let score: 10 | 20 | 30 = 20;

9. 枚举类型 (Enums)

枚举类型用于定义一组命名常量。

typescriptCopy Code

enum Direction {

Up = "UP",

Down = "DOWN",

Left = "LEFT",

Right = "RIGHT",

}

let direction: Direction = Direction.Up;

10. 类型别名 (Type Aliases)

类型别名允许为类型创建自定义名称。

typescriptCopy Code

type Point = { x: number, y: number };

let point: Point = { x: 10, y: 20 };

11. 类型断言 (Type Assertion)

类型断言用于明确告知 TypeScript 某个变量的类型。

typescriptCopy Code

let someValue: any = "Hello, TypeScript!";

let strLength: number = (someValue as string).length;

12. 类型推导 (Type Inference)

TypeScript 会自动推导变量的类型。

typescriptCopy Code

let num = 10; // TypeScript 会推导 num 为 number 类型

13. any 类型

any 类型表示可以接受任何类型的值。使用 any 类型时,TypeScript 不会对值的类型进行检查。

typescriptCopy Code

let data: any = 42;

data = "string"; // 可以赋值任何类型

14. unknown 类型

unknown 类型类似于 any,但在使用之前必须进行某种类型检查。

typescriptCopy Code

let value: unknown = 30;

if (typeof value === "number") {

let num: number = value; // 必须先进行类型检查

}

15. never 类型

never 类型表示那些永远不会有值的类型。通常用于函数总是抛出错误或进入无限循环的场景。

typescriptCopy Code

function throwError(message: string): never {

throw new Error(message);

}

function infiniteLoop(): never {

while (true) {}

}

16. void 类型

void 类型通常用于没有返回值的函数。

typescriptCopy Code

function logMessage(message: string): void {

console.log(message);

}

17. this 类型

this 类型用于限制函数或方法中的 this 上下文。

typescriptCopy Code

class Counter {

count = 0;

increment(): this {

this.count++;

return this;

}

}

let counter = new Counter();

counter.increment().increment(); // 可以链式调用

总结

TypeScript 提供了丰富的类型系统来增强 JavaScript 的类型安全性和可维护性,包括基本类型、对象、函数、数组、联合类型、交叉类型、字面量类型等。这些类型能够帮助开发者更精确地描述数据结构,从而减少类型错误,提升代码的可读性和可维护性。