TypeScript 语言 命名空间的内部类和接口的访问控制

TypeScript阿木 发布于 2025-05-28 9 次阅读


TypeScript【1】 命名空间【2】中的内部类【3】与接口【4】的访问控制【5】

在TypeScript中,命名空间(Namespace)是一种组织代码的方式,它允许我们将相关的类、接口、函数等组织在一起。而内部类(Nested Class)和接口(Interface)是TypeScript中常用的两种类型定义。本文将围绕TypeScript语言中命名空间的内部类和接口的访问控制展开讨论,旨在帮助开发者更好地理解和使用这些特性。

命名空间

在TypeScript中,命名空间是一个容器,用于将代码组织成模块。它可以帮助我们避免命名冲突,并使代码更加清晰。命名空间可以包含类、接口、函数、变量等。

typescript
namespace MyNamespace {
class MyClass {
public myMethod(): void {
console.log('Hello from MyClass');
}
}
}

在上面的代码中,`MyNamespace` 是一个命名空间,它包含了一个名为 `MyClass` 的类。

内部类

内部类是定义在另一个类内部的类。内部类分为两种:静态内部类【6】和非静态内部类【7】

静态内部类

静态内部类是使用 `static` 关键字声明的。静态内部类属于外部类的静态部分,因此可以直接通过外部类名访问。

typescript
namespace MyNamespace {
class MyClass {
public static class MyStaticClass {
public static myStaticMethod(): void {
console.log('Hello from MyStaticClass');
}
}
}
}

MyNamespace.MyClass.MyStaticClass.myStaticMethod(); // 输出: Hello from MyStaticClass

在上面的代码中,`MyStaticClass` 是一个静态内部类,可以通过 `MyNamespace.MyClass.MyStaticClass` 访问。

非静态内部类

非静态内部类不属于外部类的静态部分,因此不能直接通过外部类名访问。要访问非静态内部类,需要创建外部类的实例。

typescript
namespace MyNamespace {
class MyClass {
public class MyNonStaticClass {
public myNonStaticMethod(): void {
console.log('Hello from MyNonStaticClass');
}
}

public createNonStaticClassInstance(): MyNonStaticClass {
return new MyNonStaticClass();
}
}
}

const myClassInstance = new MyNamespace.MyClass();
const myNonStaticClassInstance = myClassInstance.createNonStaticClassInstance();
myNonStaticClassInstance.myNonStaticMethod(); // 输出: Hello from MyNonStaticClass

在上面的代码中,`MyNonStaticClass` 是一个非静态内部类,通过 `myClassInstance.createNonStaticClassInstance()` 创建其实例。

接口

接口是TypeScript中用于定义类型的一种方式。接口可以包含属性、方法和索引签名等。

typescript
namespace MyNamespace {
interface IMyInterface {
myProperty: string;
myMethod(): void;
}

class MyClass implements IMyInterface {
public myProperty: string = 'Hello';

public myMethod(): void {
console.log(this.myProperty);
}
}
}

在上面的代码中,`IMyInterface` 是一个接口,它定义了 `myProperty` 属性和 `myMethod` 方法。`MyClass` 实现了这个接口。

访问控制

在TypeScript中,访问控制用于限制对类、接口、方法等的访问。TypeScript提供了三种访问修饰符:`public`、`protected` 和 `private`。

公有【8】(Public)

公有成员可以在任何地方访问。

typescript
namespace MyNamespace {
class MyClass {
public myPublicProperty: string = 'Hello';

public myPublicMethod(): void {
console.log(this.myPublicProperty);
}
}
}

在上面的代码中,`myPublicProperty` 和 `myPublicMethod` 都是公有成员。

受保护【9】(Protected)

受保护成员只能在类内部和子类中访问。

typescript
namespace MyNamespace {
class MyClass {
protected myProtectedProperty: string = 'Hello';

protected myProtectedMethod(): void {
console.log(this.myProtectedProperty);
}
}

class MyDerivedClass extends MyClass {
public accessProtected(): void {
console.log(this.myProtectedProperty);
this.myProtectedMethod();
}
}
}

在上面的代码中,`myProtectedProperty` 和 `myProtectedMethod` 都是受保护成员,可以在 `MyDerivedClass` 中访问。

私有【10】(Private)

私有成员只能在类内部访问。

typescript
namespace MyNamespace {
class MyClass {
private myPrivateProperty: string = 'Hello';

private myPrivateMethod(): void {
console.log(this.myPrivateProperty);
}
}
}

在上面的代码中,`myPrivateProperty` 和 `myPrivateMethod` 都是私有成员,只能在 `MyClass` 内部访问。

总结

本文介绍了TypeScript中命名空间的内部类和接口的访问控制。通过理解命名空间、内部类和接口的概念,以及访问控制的使用,开发者可以更好地组织代码,提高代码的可维护性和可读性。在实际开发中,合理使用这些特性将有助于构建高质量的TypeScript应用程序。