如何允许模块中定义的类可以在模块外部访问?
默认情况下编写的 TypeScript 脚本位于全局范围内,这意味着一个文件中的所有函数、方法、变量等都可以在所有其他 TypeScript 文件中访问。这可能会导致变量、函数的冲突,因为程序员可以在没有任何实现的情况下编辑函数/变量名称或值。因此,引入了模块的概念来防止这种默认的全局范围,而是将所有关联的变量和函数包装在本地范围内。这很有用,尤其是在维护庞大的代码库时。
由于模块在 TypeScript 文件中创建本地范围,因此模块中定义的所有变量、函数或类在该特定模块之外都无法访问。在本文中,我们将了解如何允许模块中定义的类在模块外部可访问。 TypeScript 模块中定义的类的语法如下:
句法:
module nameOfModule {
class nameOfClass {
field;
method;
}
}
示例 1:在此示例中,在名为University的模块中创建了一个Student类,该模块具有一个参数化构造函数,用于初始化或构造对象,其参数为表示学生姓名的字符串和表示学生年龄的数字学生。
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);
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);
输出:有一个编译错误,因为大学模块内的学生类不能在模块外访问,如前所述。
为了解决这个问题,我们只需使用export关键字,它使模块内的所有类或函数、变量、方法都可以在该模块之外访问。换句话说,我们可以说 export 关键字将所有局部作用域的类或函数、变量转换为全局作用域。
例2:这个例子和前面的例子很相似,唯一的区别是在Student类之前使用了export关键字,这意味着这个类及其相关的函数、方法可以在大学模块之外使用。
索引.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);
输出: