TypeScript 的类型
在 TypeScript 中,类型用于定义变量、函数参数、返回值等的结构。以下是 TypeScript 中常见的类型及其相关概念:
1. 基本类型 (Primitive Types)
这些类型用于定义最基础的数据结构:
-
number
: 数字类型,支持整数和浮点数。typescriptCopy Codelet age: number = 30; let price: number = 99.99;
-
string
: 字符串类型。typescriptCopy Codelet name: string = "John"; let message: string = `Hello, ${name}`;
-
boolean
: 布尔值类型,只有true
和false
两个值。typescriptCopy Codelet isActive: boolean = true;
-
null
: 空值类型,表示无值。typescriptCopy Codelet value: null = null;
-
undefined
: 未定义类型,表示一个变量未被赋值时的默认状态。typescriptCopy Codelet value: undefined = undefined;
-
symbol
: ES6 引入的一种新的基本数据类型,表示唯一的值。typescriptCopy Codelet sym: symbol = Symbol('description');
-
bigint
: 支持大整数类型,适用于大于2^53 - 1
或小于-2^53 + 1
的整数。typescriptCopy Codelet bigNum: bigint = 1234567890123456789012345678901234567890n;
2. 对象类型 (Object Types)
-
object
: 表示一个非原始类型,通常用于定义对象的结构。typescriptCopy Codelet obj: object = { name: 'John', age: 30 };
-
对象字面量类型: 可以显式地定义对象的结构。
typescriptCopy Codelet person: { name: string, age: number } = { name: 'Alice', age: 25 };
3. 数组类型 (Array Types)
-
Array<type>
: 定义元素类型相同的数组。typescriptCopy Codelet numbers: Array<number> = [1, 2, 3];
-
type[]
: 另一种数组的写法,等同于Array<type>
。typescriptCopy Codelet names: string[] = ['Alice', 'Bob', 'Charlie'];
4. 元组类型 (Tuple Types)
元组是一种已知元素数量和类型的数组。
let tuple: [string, number] = ['Alice', 30];
元组支持不同类型的元素,但要求严格按位置和类型定义。
5. 函数类型 (Function Types)
函数类型用于描述函数的参数和返回值类型。
let add: (a: number, b: number) => number = (a, b) => a + b;
6. 联合类型 (Union Types)
联合类型允许一个变量拥有多个类型。
let value: string | number = "Hello";
value = 42; // 也可以是数字
7. 交叉类型 (Intersection Types)
交叉类型用于组合多个类型,表示一个变量同时具有多个类型。
type A = { name: string };
type B = { age: number };
type C = A & B;
let person: C = { name: "Alice", age: 30 };
8. 字面量类型 (Literal Types)
字面量类型指的是使用特定的值作为类型,例如:特定的字符串、数字等。
let direction: "left" | "right" = "left";
let score: 10 | 20 | 30 = 20;
9. 枚举类型 (Enums)
枚举类型用于定义一组命名常量。
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
let direction: Direction = Direction.Up;
10. 类型别名 (Type Aliases)
类型别名允许为类型创建自定义名称。
type Point = { x: number, y: number };
let point: Point = { x: 10, y: 20 };
11. 类型断言 (Type Assertion)
类型断言用于明确告知 TypeScript 某个变量的类型。
let someValue: any = "Hello, TypeScript!";
let strLength: number = (someValue as string).length;
12. 类型推导 (Type Inference)
TypeScript 会自动推导变量的类型。
let num = 10; // TypeScript 会推导 num 为 number 类型
13. any
类型
any
类型表示可以接受任何类型的值。使用 any
类型时,TypeScript 不会对值的类型进行检查。
let data: any = 42;
data = "string"; // 可以赋值任何类型
14. unknown
类型
unknown
类型类似于 any
,但在使用之前必须进行某种类型检查。
let value: unknown = 30;
if (typeof value === "number") {
let num: number = value; // 必须先进行类型检查
}
15. never
类型
never
类型表示那些永远不会有值的类型。通常用于函数总是抛出错误或进入无限循环的场景。
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {}
}
16. void
类型
void
类型通常用于没有返回值的函数。
function logMessage(message: string): void {
console.log(message);
}
17. this
类型
this
类型用于限制函数或方法中的 this
上下文。
class Counter {
count = 0;
increment(): this {
this.count++;
return this;
}
}
let counter = new Counter();
counter.increment().increment(); // 可以链式调用
总结
TypeScript 提供了丰富的类型系统来增强 JavaScript 的类型安全性和可维护性,包括基本类型、对象、函数、数组、联合类型、交叉类型、字面量类型等。这些类型能够帮助开发者更精确地描述数据结构,从而减少类型错误,提升代码的可读性和可维护性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2023-01-01 流畅的Flurl.Http