📜  如何允许模块中定义的类可以在模块外部访问?

📅  最后修改于: 2022-05-13 01:56:14.118000             🧑  作者: Mango

如何允许模块中定义的类可以在模块外部访问?

默认情况下编写的 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);

输出: