TypeScript 类型系统完整指南

目录

  1. 基础类型 (Primitive Types)
  2. 数组类型 (Array Types)
  3. 元组类型 (Tuple Types)
  4. 枚举类型 (Enum Types)
  5. 对象类型 (Object Types)
  6. 函数类型 (Function Types)
  7. 接口类型 (Interface Types)
  8. 类类型 (Class Types)
  9. 泛型类型 (Generic Types)
  10. 联合类型 (Union Types)
  11. 交叉类型 (Intersection Types)
  12. 类型别名 (Type Aliases)
  13. 字面量类型 (Literal Types)
  14. 条件类型 (Conditional Types)
  15. 映射类型 (Mapped Types)
  16. 模板字面量类型 (Template Literal Types)
  17. 索引访问类型 (Indexed Access Types)
  18. 工具类型 (Utility Types)
  19. 模块和命名空间
  20. 声明合并 (Declaration Merging)
  21. 类型断言 (Type Assertions)

1. 基础类型 (Primitive Types)

TypeScript 支持 JavaScript 的所有基础类型,并添加了一些额外的类型。

1.1 布尔类型 (boolean)

let isDone: boolean = false;
let isActive: boolean = true;

1.2 数字类型 (number)

支持十进制、十六进制、八进制、二进制字面量。

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

1.3 字符串类型 (string)

支持普通字符串和模板字符串。

let color: string = "blue";
let fullName: string = `Bob Bobbington`;
let sentence: string = `Hello, my name is ${
     
     fullName}`;

1.4 空值类型 (void)

通常用于函数没有返回值的情况。

function warnUser(): void {
   
   
    console.log("This is my warning message");
}

1.5 Null 和 Undefined

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

1.6 Never 类型

表示永不存在的值的类型,通常用于抛出异常或无限循环的函数。

function error(message: string): never {
   
   
    throw new Error(message);
}

1.7 Unknown 类型

类型安全的 any,使用前需要进行类型检查。

let userInput: unknown;
if (typeof userInput === "string") {
   
   
    // 现在可以安全使用 userInput 作为 string
}

1.8 Any 类型

关闭类型检查,可以是任何类型。

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

2. 数组类型 (Array Types)

2.1 基本数组类型

// 两种写法
let list1: number[] = [1, 2, 3];
let list2: Array<number> = [1, 2, 3];

2.2 混合类型数组

let mixedArray: (string | number)[] = ["hello", 42, "world"];

2.3 只读数组

let readonlyArray: ReadonlyArray<number> = [1, 2, 3];
// readonlyArray[0] = 12; // 错误!只读数组不能修改

3. 元组类型 (Tuple Types)

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

3.1 基本元组

let x: [string, number];
x = ["hello", 10]; // 正确
// x = [10, "hello"]; // 错误!类型顺序不匹配

3.2 可选元组元素

let optionalTuple: [string, number?] = ["hello"];

3.3 剩余元素

let restTuple: [string, ...number[]] = ["hello", 1, 2, 3];

3.4 命名元组

let namedTuple: [name: string, age: number] = ["Alice", 30];

4. 枚举类型 (Enum Types)

4.1 数字枚举

enum Direction {
   
   
    Up = 1,
    Down,    // 2
    Left,    // 3
    Right    // 4
}

4.2 字符串枚举

enum Color {
   
   
    Red = "RED",
    Green = "GREEN",
    Blue = "BLUE"
}

4.3 常量枚举

编译时会被内联,提高性能。

const enum Directions {
   
   
    Up,
    Down,
    Left,
    Right
}

5. 对象类型 (Object Types)

5.1 对象类型注解

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

5.2 可选属性

let personWithOptional: {
   
    name: string; age?: number } = {
   
   
    name: "Bob"
};

5.3 只读属性

let personWithReadonly: {
   
    readonly id: number; name: string } = {
   
   
    id: 1,
    name: "Charlie"
};

5.4 索引签名

let personWithIndex: {
   
    [key: string]: any } = {
   
   
    name: "David",
    age: 25,
    city: "New York"
};

6. 函数类型 (Function Types)

6.1 函数类型注解

function add(x: number, y: number): number {
   
   
    return x + y;
}

6.2 函数表达式

let myAdd: (x: number, y: number) => number = function(x: number, y: number): number {
   
   
    return x + y;
};

6.3 可选参数

function buildName(firstName: string, lastName?: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值