在 TypeScript 中,类型用于定义变量、函数参数、返回值等的结构。以下是 TypeScript 中常见的类型及其相关概念:
1. 基本类型 (Primitive Types)
这些类型用于定义最基础的数据结构:
-
typescriptCopy Codenumber
: 数字类型,支持整数和浮点数。let age: number = 30; let price: number = 99.99;
-
typescriptCopy Codestring
: 字符串类型。let name: string = "John"; let message: string = `Hello, ${name}`;
-
typescriptCopy Codeboolean
: 布尔值类型,只有true
和false
两个值。let isActive: boolean = true;
-
typescriptCopy Codenull
: 空值类型,表示无值。let value: null = null;
-
typescriptCopy Codeundefined
: 未定义类型,表示一个变量未被赋值时的默认状态。let value: undefined = undefined;
-
typescriptCopy Codesymbol
: ES6 引入的一种新的基本数据类型,表示唯一的值。let sym: symbol = Symbol('description');
-
typescriptCopy Codebigint
: 支持大整数类型,适用于大于2^53 - 1
或小于-2^53 + 1
的整数。let bigNum: bigint = 1234567890123456789012345678901234567890n;
2. 对象类型 (Object Types)
-
typescriptCopy Codeobject
: 表示一个非原始类型,通常用于定义对象的结构。let obj: object = { name: 'John', age: 30 };
-
对象字面量类型: 可以显式地定义对象的结构。
typescriptCopy Codelet person: { name: string, age: number } = { name: 'Alice', age: 25 };
3. 数组类型 (Array Types)
-
typescriptCopy CodeArray<type>
: 定义元素类型相同的数组。let numbers: Array<number> = [1, 2, 3];
-
typescriptCopy Codetype[]
: 另一种数组的写法,等同于Array<type>
。let names: string[] = ['Alice', 'Bob', 'Charlie'];
4. 元组类型 (Tuple Types)
元组是一种已知元素数量和类型的数组。
typescriptCopy Codelet tuple: [string, number] = ['Alice', 30];
元组支持不同类型的元素,但要求严格按位置和类型定义。
5. 函数类型 (Function Types)
函数类型用于描述函数的参数和返回值类型。
typescriptCopy Codelet add: (a: number, b: number) => number = (a, b) => a + b;
6. 联合类型 (Union Types)
联合类型允许一个变量拥有多个类型。
typescriptCopy Codelet value: string | number = "Hello";
value = 42; // 也可以是数字
7. 交叉类型 (Intersection Types)
交叉类型用于组合多个类型,表示一个变量同时具有多个类型。
typescriptCopy Codetype A = { name: string };
type B = { age: number };
type C = A & B;
let person: C = { name: "Alice", age: 30 };
8. 字面量类型 (Literal Types)
字面量类型指的是使用特定的值作为类型,例如:特定的字符串、数字等。
typescriptCopy Codelet direction: "left" | "right" = "left";
let score: 10 | 20 | 30 = 20;
9. 枚举类型 (Enums)
枚举类型用于定义一组命名常量。
typescriptCopy Codeenum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
let direction: Direction = Direction.Up;
10. 类型别名 (Type Aliases)
类型别名允许为类型创建自定义名称。
typescriptCopy Codetype Point = { x: number, y: number };
let point: Point = { x: 10, y: 20 };
11. 类型断言 (Type Assertion)
类型断言用于明确告知 TypeScript 某个变量的类型。
typescriptCopy Codelet someValue: any = "Hello, TypeScript!";
let strLength: number = (someValue as string).length;
12. 类型推导 (Type Inference)
TypeScript 会自动推导变量的类型。
typescriptCopy Codelet 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 的类型安全性和可维护性,包括基本类型、对象、函数、数组、联合类型、交叉类型、字面量类型等。这些类型能够帮助开发者更精确地描述数据结构,从而减少类型错误,提升代码的可读性和可维护性。
标签:TypeScript,string,number,typescriptCopy,Code,let,类型 From: https://www.cnblogs.com/guangzhiruijie/p/18646399