Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

下面是一份TypeScript 基础类型 + 组合类型学习课程(Markdown版),适合入门学习,也适合当复习资料使用。


TypeScript 基础类型与组合类型教程

TypeScript 是 JavaScript 的超集,它在 JS 基础上增加了静态类型系统,可以在编译阶段发现错误,提高代码可维护性。


一、基础类型(Basic Types)

1. number(数字类型)

let age: number = 18;
let price: number = 99.99;

👉 支持整数和浮点数,没有区分 int/float


2. string(字符串)

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

3. boolean(布尔类型)

let isLogin: boolean = true;
let isDeleted: boolean = false;

4. null 和 undefined

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

👉 通常用于“值不存在”


5. any(任意类型)

let data: any = 123;
data = "hello";
data = true;

⚠️ 不推荐使用,会失去类型检查优势


6. unknown(未知类型)

let value: unknown = "hello";

// 必须进行类型判断才能使用
if (typeof value === "string") {
  console.log(value.toUpperCase());
}

👉 比 any 更安全


7. void(无返回值)

function logMessage(): void {
  console.log("Hello TypeScript");
}

8. never(永不存在的值)

function throwError(): never {
  throw new Error("Error!");
}

👉 常用于报错函数或死循环


二、数组类型(Array)

1. 基本写法

let nums: number[] = [1, 2, 3];
let names: string[] = ["Alice", "Bob"];

2. 泛型写法

let nums: Array<number> = [1, 2, 3];

三、元组类型(Tuple)

👉 固定长度 + 固定类型

let user: [string, number] = ["Alice", 18];

访问:

console.log(user[0]); // string
console.log(user[1]); // number

每个位置类型可以不同,但顺序固定长度固定的数组


四、对象类型(Object)

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

五、函数类型

1. 基本函数

function add(a: number, b: number): number {
  return a + b;
}

2. 箭头函数

const multiply = (a: number, b: number): number => {
  return a * b;
};

3. 函数类型声明

let fn: (x: number, y: number) => number;

fn = (a, b) => a + b;

六、联合类型(Union Types)

👉 多种类型之一

let id: number | string;

id = 123;
id = "abc";

实战示例

function printId(id: number | string) {
  console.log("ID:", id);
}

七、交叉类型(Intersection Types)

👉 多种类型合并

type A = {
  name: string;
};

type B = {
  age: number;
};

type C = A & B;

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

八、字面量类型(Literal Types)

let direction: "left" | "right";

direction = "left";
// direction = "up"; ❌ 错误

九、类型别名(Type Alias)

type UserID = string | number;

let id: UserID = 123;

十、接口(Interface)

interface User {
  name: string;
  age: number;
}

const user: User = {
  name: "Alice",
  age: 18,
};

interface vs type

特性interfacetype
扩展支持 extends支持 &
推荐对象结构更灵活

十一、可选属性(Optional Properties)

interface User {
  name: string;
  age?: number;
}

十二、只读属性(readonly)

interface User {
  readonly id: number;
  name: string;
}

const user: User = {
  id: 1,
  name: "Alice",
};

// user.id = 2 ❌ 错误

十三、综合示例(实战)

type Role = "admin" | "user";

interface Account {
  id: number;
  name: string;
  role: Role;
}

function login(account: Account): string {
  if (account.role === "admin") {
    return "Welcome Admin";
  }
  return "Welcome User";
}

总结

TypeScript 类型系统核心可以归纳为:

  • 基础类型:number / string / boolean

  • 特殊类型:any / unknown / void / never

  • 组合类型:union / intersection

  • 结构类型:interface / type

  • 扩展能力:tuple / literal / optional / readonly