TypeScript - “唯一”关键字的用途是什么

作者:编程家 分类: typescript 时间:2025-12-19

唯一关键字的用途

在 TypeScript 中,唯一关键字的用途是用来定义只能有一个实例的类。通过使用唯一关键字,可以确保一个类在整个程序中只能被实例化一次,避免创建多个相同实例的情况发生。这在一些特定场景下非常有用,例如需要全局共享资源的情况,或者需要确保某个对象的唯一性。

案例代码

下面是一个使用唯一关键字的案例代码,通过一个 Logger 类来演示唯一实例的概念:

typescript

class Logger {

private static instance: Logger;

private logs: string[];

private constructor() {

this.logs = [];

}

public static getInstance(): Logger {

if (!Logger.instance) {

Logger.instance = new Logger();

}

return Logger.instance;

}

public log(message: string): void {

this.logs.push(message);

console.log(message);

}

public getLogs(): string[] {

return this.logs;

}

}

// 创建多个实例

const logger1 = Logger.getInstance();

const logger2 = Logger.getInstance();

logger1.log("Log 1"); // 输出: Log 1

logger2.log("Log 2"); // 输出: Log 2

console.log(logger1.getLogs()); // 输出: ["Log 1", "Log 2"]

console.log(logger2.getLogs()); // 输出: ["Log 1", "Log 2"]

console.log(logger1 === logger2); // 输出: true

在上面的代码中,Logger 类的构造函数被声明为私有,这意味着无法通过 `new Logger()` 的方式直接创建实例。相反,通过静态方法 `getInstance()` 来获取 Logger 类的唯一实例。如果在第一次调用 `getInstance()` 时,实例还未被创建,则会创建一个新的实例;否则,直接返回已存在的实例。这样,无论在代码中的哪个位置调用 `getInstance()`,都能获取到同一个唯一实例。

实现单例模式的优势

使用唯一关键字实现单例模式的主要优势在于可以确保整个程序中只有一个实例存在,从而避免了多个实例之间的数据同步和资源共享的问题。此外,使用单例模式还可以减少内存占用,因为不需要创建多个相同的实例。

使用单例模式的场景

单例模式适用于以下场景:

1. 需要全局共享某个资源,例如数据库连接、日志记录器等。

2. 需要确保某个对象的唯一性,例如系统配置、用户管理器等。

3. 需要控制某个类的实例个数,例如线程池、连接池等。

唯一关键字在 TypeScript 中的用途是用来定义只能有一个实例的类。通过单例模式,可以确保一个类在整个程序中只能被实例化一次,避免创建多个相同实例的情况发生。单例模式适用于需要全局共享资源、确保对象唯一性或控制实例个数的场景。通过使用唯一关键字,可以简化代码逻辑,提高程序的可维护性和性能。