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
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 的类型安全性和可维护性,包括基本类型、对象、函数、数组、联合类型、交叉类型、字面量类型等。这些类型能够帮助开发者更精确地描述数据结构,从而减少类型错误,提升代码的可读性和可维护性。