在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
我之前有写过TS1.5版本之前的“模块”的笔记:TypeScript学习笔记(七):模块 但是TS这里的模块和在ECMAScript 2015里的模块(即JS原生支持了模块的概念)概率出现了混淆,所以在1.5的版本里,为了与ECMAScript 2015里的术语保持一致,“内部模块”现在称做“命名空间”,“外部模块”现在则简称为“模块”。 下面摘录自Egret博客的一段详细解释(连接):
下面我们来分别看看。 把之前的module关键字换成namespace关键字即可,使用方法和功能都不变,类似Java的包或C#的命名空间。当然,不替换或者继续使用module关键字也是可以的,但是会出现概念混淆的情况,最好按照官方的说法,统一使用namespace吧,包括*.d.ts文件。 另外对于存在依赖关系的文件,仍然可以使用: /// <reference path="SimpleWebSocket.ts"/> 方式来指定当前文件依赖的其它文件。 模块TS中,对模块也是支持的,如果对JS的模块不熟悉可以查看这篇笔记。 使用什么标准我们知道JS中模块有多种标准,一般常用的有两种,针对Node.js同步加载的CommonJS,和针对浏览器异步加载的AMD,在TS项目中,有一个tsconfig.json的文件,一般如下: 1 { 2 "compilerOptions": { 3 "module": "commonjs", 4 "target": "es5", 5 "sourceMap": true 6 }, 7 "exclude": [ 8 "node_modules" 9 ] 10 } 其中的module表示模块使用的标准,默认是CommonJS标准。 TS模块代码模块代码,Utils.ts: 1 export const version: number = 0.1; 2 3 export class Utils { 4 static add(a: number, b: number): number { 5 return a + b; 6 } 7 8 private _name: string; 9 10 constructor(name: string) { 11 this._name = name; 12 } 13 14 sayHi(): void { 15 console.log("Hi, I am " + this._name); 16 } 17 } 注意不要使用module或namespace进行包含,直接使用export导出即表示要导出到外部可以访问的对象。 使用模块代码,App.ts: 1 import * as utils from "./Utils"; 2 3 console.log(utils.version); 4 5 var obj = new utils.Utils("Li Lei"); 6 obj.sayHi(); 使用TS的导入写法即可,详情点击这里。 CommonJS编译后的代码Utils.js: 1 "use strict"; 2 Object.defineProperty(exports, "__esModule", { value: true }); 3 exports.version = 0.1; 4 var Utils = (function () { 5 function Utils(name) { 6 this._name = name; 7 } 8 Utils.add = function (a, b) { 9 return a + b; 10 }; 11 Utils.prototype.sayHi = function () { 12 console.log("Hi, I am " + this._name); 13 }; 14 return Utils; 15 }()); 16 exports.Utils = Utils; App.js: 1 "use strict"; 2 Object.defineProperty(exports, "__esModule", { value: true }); 3 var utils = require("./Utils"); 4 console.log(utils.version); 5 var obj = new utils.Utils("Li Lei"); 6 obj.sayHi(); 上面生成的代码可以在Node.js中使用。 AMD编译后的代码先修改tsconfig.json如下: 1 { 2 "compilerOptions": { 3 "module": "amd", 4 "target": "es5", 5 "sourceMap": true 6 }, 7 "exclude": [ 8 "node_modules" 9 ] 10 } 编译之后,Utils.js: 1 define(["require", "exports"], function (require, exports) { 2 "use strict"; 3 Object.defineProperty(exports, "__esModule", { value: true }); 4 exports.version = 0.1; 5 var Utils = (function () { 6 function Utils(name) { 7 this._name = name; 8 } 9 Utils.add = function (a, b) { 10 return a + b; 11 }; 12 Utils.prototype.sayHi = function () { 13 console.log("Hi, I am " + this._name); 14 }; 15 return Utils; 16 }()); 17 exports.Utils = Utils; 18 }); App.js: 1 define(["require", "exports", "./Utils"], function (require, exports, utils) { 2 "use strict"; 3 Object.defineProperty(exports, "__esModule", { value: true }); 4 console.log(utils.version); 5 var obj = new utils.Utils("Li Lei"); 6 obj.sayHi(); 7 }); 上面的代码可以在浏览器中使用,注意要引入require.js库就行。 |
请发表评论