编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • Android提升进阶

  • iOS开发和进阶

  • Web开发和进阶

    • README
    • HTML工具手册

    • TypeScript入门

      • README
      • 语言基础
      • 类和对象
        • 01.对象类型
          • 1.1 对象字面量
          • 1.2 可选属性
          • 1.3 只读属性
          • 1.4 索引签名
          • 1.5 对象类型别名
          • 1.6 对象解构
          • 1.7 对象高级用法
        • 02.接口
          • 2.1 接口介绍
          • 2.2 可选属性
          • 2.3 只读属性
          • 2.4 函数类型
          • 2.5 继承
        • 03.类与对象
          • 3.1 类基本语法
          • 3.2 类的成员
          • 3.3 类的继承
          • 3.4 抽象类
          • 3.6 静态成员
          • 3.7 接口与类
          • 3.8 泛型类
          • 3.9 类与对象关系
          • 3.10 接口VS类
      • 高级类型
      • 模块系统
      • 实用工具
    • Vue高级进阶

  • Linux应用开发

  • Apps
  • Web开发和进阶
  • TypeScript入门
杨充
2025-02-22
目录

类和对象

# 02.类和对象

# 目录介绍

  • 01.对象类型
    • 1.1 对象字面量
    • 1.2 可选属性
    • 1.3 只读属性
    • 1.4 索引签名
    • 1.5 对象类型别名
    • 1.6 对象解构
    • 1.7 对象高级用法
  • 02.interface
    • 2.1 接口介绍
    • 2.2 可选属性
    • 2.3 只读属性
    • 2.4 函数类型
    • 2.5 继承
  • 03.类与对象
    • 3.1 类基本语法
    • 3.2 类的成员
    • 3.3 类的继承
    • 3.4 抽象类
    • 3.6 静态成员
    • 3.7 接口与类
    • 3.8 泛型类
    • 3.9 类与对象关系
    • 3.10 接口VS类

# 01.对象类型

# 1.1 对象字面量

对象类型的最简单声明方法,就是使用大括号表示对象,在大括号内部声明每个属性和方法的类型。

使用 {} 定义对象,并指定属性类型。

let user: { name: string; age: number } = {
    //属性的类型可以用分号结尾,也可以用逗号结尾。
    name: "Alice",
    age: 25,
};
1
2
3
4
5

# 1.2 可选属性

使用 ? 标记可选属性。

let user: { name: string; age?: number } = {
  name: "Alice",
};
1
2
3

# 1.3 只读属性

使用 readonly 标记只读属性。

let user: { readonly name: string; age: number } = {
  name: "Alice",
  age: 25,
};

user.name = "Bob"; // 报错:无法修改只读属性
1
2
3
4
5
6

# 1.4 索引签名

允许对象具有动态属性。

let user: { [key: string]: string | number } = {
  name: "Alice",
  age: 25,
};

user.email = "alice@example.com"; // 合法
1
2
3
4
5
6

# 1.5 对象类型别名

使用 type 定义对象类型别名。

type User = {
  name: string;
  age: number;
};

let user: User = {
  name: "Alice",
  age: 25,
};
1
2
3
4
5
6
7
8
9

# 1.6 对象解构

解构赋值用于直接从对象中提取属性。

从对象中提取属性并赋值给变量。

let user = { name: "Alice", age: 25 };
let { name, age } = user;

console.log(name); // Alice
console.log(age); // 25
1
2
3
4
5

# 1.7 对象高级用法

1.对象展开:使用 ... 展开对象。

let user = { name: "Alice", age: 25 };
let updatedUser = { ...user, age: 26 };

console.log(updatedUser); // { name: "Alice", age: 26 }
1
2
3
4

2.对象合并:使用 Object.assign 合并对象。

let user = { name: "Alice" };
let details = { age: 25 };

let merged = Object.assign({}, user, details);
console.log(merged); // { name: "Alice", age: 25 }
1
2
3
4
5

3.对象冻结:使用 Object.freeze 冻结对象,防止修改。

let user = Object.freeze({ name: "Alice", age: 25 });
user.age = 26; // 报错:无法修改冻结对象
1
2

# 02.接口

  • 定义:interface 是一种纯粹的类型定义工具,用于描述对象的形状(即对象的结构和属性)。
  • 用途:主要用于类型检查,确保对象符合特定的结构。
  • 特点: 不能包含实现(如方法的具体逻辑)。可以被类实现(implements),也可以用于定义函数、对象、数组等的类型。

# 2.1 接口介绍

使用 interface 定义对象的结构。

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

let user: User = {
  name: "Alice",
  age: 25,
};
1
2
3
4
5
6
7
8
9

# 2.2 可选属性

interface User {
  name: string;
  age?: number;
}
1
2
3
4

# 2.3 只读属性

interface User {
  readonly name: string;
  age: number;
}
1
2
3
4

# 2.4 函数类型

interface User {
  name: string;
  greet(): void;
}

let user: User = {
  name: "Alice",
  greet() {
      console.log(`Hello, ${this.name}`);
  },
};
1
2
3
4
5
6
7
8
9
10
11

# 2.5 继承

接口可以继承其他接口。

interface Person {
  name: string;
}

interface User extends Person {
  age: number;
}

let user: User = {
  name: "Alice",
  age: 25,
};
1
2
3
4
5
6
7
8
9
10
11
12

# 03.类与对象

TypeScript 中的类和对象是面向对象编程(OOP)的核心概念。

TypeScript 在 JavaScript 类的基础上增加了类型支持,使得类的定义和使用更加安全和灵活。

  • 定义:class 是一种面向对象的编程工具,用于创建对象实例。
  • 用途:用于封装数据和行为,支持继承、多态等面向对象特性。
  • 特点:可以包含属性、方法以及它们的实现。可以创建实例(new 关键字)。

# 3.1 类基本语法

使用 class 关键字定义类。

class Person {
    name: string;
    age: number;
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
    greet(): void {
        console.log(`Hello, my name is ${this.name}`);
    }
}
1
2
3
4
5
6
7
8
9
10
11

创建对象,使用 new 关键字创建类的实例。

const person = new Person("Alice", 30);
person.greet(); // "Hello, my name is Alice"
1
2

# 3.2 类的成员

1.属性:类的属性可以定义类型,并支持默认值。

class Person {
    name: string = "Unknown";
    age: number;
}
1
2
3
4

2.方法:类的方法可以定义参数类型和返回值类型。

class Person {
    greet(message: string): void {
        console.log(message);
    }
}
1
2
3
4
5

3.构造函数:构造函数用于初始化对象,参数可以定义类型。

class Person {
    constructor(public name: string, public age: number) {}
}
1
2
3

4.访问修饰符:TypeScript 提供了三种访问修饰符:

  • public:默认值,成员可以在任何地方访问。
  • private:成员只能在类内部访问。
  • protected:成员可以在类内部和子类中访问。
class Person {
    public name: string;
    private age: number;
    protected gender: string;

    constructor(name: string, age: number, gender: string) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
}
1
2
3
4
5
6
7
8
9
10
11

5.只读属性:使用 readonly 关键字定义只读属性。

class Person {
    readonly id: number;

    constructor(id: number) {
        this.id = id;
    }
}

const person = new Person(1);
person.id = 2; // 错误,id 是只读的
1
2
3
4
5
6
7
8
9
10

# 3.3 类的继承

1.继承:使用 extends 关键字实现继承。

class Animal {
    name: string;

    constructor(name: string) {
        this.name = name;
    }

    move(distance: number = 0): void {
        console.log(`${this.name} moved ${distance}m`);
    }
}

class Dog extends Animal {
    bark(): void {
        console.log("Woof! Woof!");
    }
}

const dog = new Dog("Buddy");
dog.move(10); // "Buddy moved 10m"
dog.bark();   // "Woof! Woof!"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

2.方法重写:子类可以重写父类的方法。

class Dog extends Animal {
    move(distance: number = 5): void {
        console.log(`${this.name} ran ${distance}m`);
    }
}
1
2
3
4
5

3.super关键字:使用 super 调用父类的构造函数或方法。

class Dog extends Animal {
    constructor(name: string) {
        super(name); // 调用父类的构造函数
    }

    move(distance: number = 5): void {
        super.move(distance); // 调用父类的 move 方法
    }
}
1
2
3
4
5
6
7
8
9

# 3.4 抽象类

使用 abstract 关键字定义抽象类,抽象类不能直接实例化,只能被继承。

abstract class Animal {
    abstract makeSound(): void;

    move(): void {
        console.log("Moving...");
    }
}
1
2
3
4
5
6
7

派生类必须实现抽象类中的所有抽象方法。

class Dog extends Animal {
    makeSound(): void {
        console.log("Woof! Woof!");
    }
}

const dog = new Dog();
dog.makeSound(); // "Woof! Woof!"
dog.move();      // "Moving..."
1
2
3
4
5
6
7
8
9

# 3.6 静态成员

使用 static 关键字定义静态成员,静态成员属于类而不是实例。

class MathUtils {
    static PI: number = 3.14;

    static calculateArea(radius: number): number {
        return this.PI * radius * radius;
    }
}

console.log(MathUtils.calculateArea(5)); // 78.5
1
2
3
4
5
6
7
8
9

# 3.7 接口与类

接口可以用于约束类的结构。

interface PersonInterface {
    name: string;
    greet(): void;
}

class Person implements PersonInterface {
    name: string;

    constructor(name: string) {
        this.name = name;
    }

    greet(): void {
        console.log(`Hello, my name is ${this.name}`);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 3.8 泛型类

使用泛型使类适用于多种类型。

class Box<T> {
    private value: T;

    constructor(value: T) {
        this.value = value;
    }

    getValue(): T {
        return this.value;
    }
}

const box = new Box<number>(42);
console.log(box.getValue()); // 42
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 3.9 类与对象关系

  • 类:是对象的模板,定义了对象的属性和方法。
  • 对象:是类的实例,具有类定义的属性和方法。
class Car {
    brand: string;

    constructor(brand: string) {
        this.brand = brand;
    }

    drive(): void {
        console.log(`Driving a ${this.brand}`);
    }
}

const myCar = new Car("Toyota");
myCar.drive(); // "Driving a Toyota"
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 3.10 接口VS类

特性 interface class
定义 类型定义 对象模板
实现 不能包含实现 可以包含实现
实例化 不能实例化 可以实例化
继承 支持接口继承 支持类继承
默认值 不能定义默认值 可以定义默认值
静态成员 不能定义静态成员 可以定义静态成员
使用场景 类型检查、定义对象形状 封装数据和行为、创建对象实例

interface使用场景

  • 定义对象的形状(如 API 响应、函数参数等)。
  • 实现多态性(通过类实现接口)。
  • 定义可重用的类型。

class使用场景

  • 封装数据和行为。
  • 创建对象实例。
  • 实现继承和多态。
上次更新: 2026/06/10, 11:13:41
语言基础
高级类型

← 语言基础 高级类型→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式