TypeScript 如何使模块中定义的类可以在模块外部访问
默认情况下,TypeScript脚本位于全局范围,这意味着一个文件中的所有函数、方法、变量等在所有其他TypeScript文件中都是可访问的。这可能会导致变量、函数的冲突,程序员可以在没有意识到的情况下编辑函数/变量的名称或值。因此,引入了模块的概念,以防止这种默认的全局范围,并将所有相关变量和函数封装在局部范围内。这在维护庞大的代码库时非常有用。
由于模块在TypeScript文件中创建局部范围,所以在模块内部定义的所有变量、函数或类将无法在该模块外部访问。在本文中,我们将看到如何使在模块中定义的类可以在模块外部访问。TypeScript中定义模块中类的语法如下:
语法:
module nameOfModule {
class nameOfClass {
field;
method;
}
}
示例1: 在这个示例中,一个名为 University 的模块内部创建了一个名为 Students 的类,该类具有一个带参数的构造函数,用于使用代表学生姓名的字符串参数和代表学生年龄的数字参数进行对象的初始化或构造。
script.ts
module University {
class Student {
constructor(public name: string,
public age: number) { }
}
var firstStudent = new Student("GeeksforGeeks", 15);
}
var secondStudent = new University.Student("Rajat", 20);
console.log(secondStudent);
输出:
正如之前讨论的那样,由于模块内部的Student类在模块外部不可访问,所以会出现编译错误。

为了解决这个问题,我们只需使用 export 关键字,它可以让模块内部的所有类、函数、变量和方法在模块外部都可以访问。换句话说,可以说export关键字将所有局部作用域的类、函数和变量转换为全局作用域。
示例2: 这个示例和上一个示例非常相似,唯一的区别在于在类Student之前使用了 export 关键字,这意味着可以在University模块之外使用该类及其相关的函数和方法。
index.ts
module University {
export class Student {
constructor(public name: string,
public age: number) { }
}
var firstStudent = new Student("GeeksforGeeks", 15);
}
var secondStudent = new University.Student("Rajat", 20);
console.log(secondStudent);
index.js
var University;
(function (University) {
var Student = /** @class */ (function () {
function Student(name, age) {
this.name = name;
this.age = age;
}
return Student;
}());
University.Student = Student;
var firstStudent = new Student("GeeksforGeeks", 15);
})(University || (University = {}));
var secondStudent = new University.Student("Rajat", 20);
console.log(secondStudent);
输出:

极客教程