/* 其实前面一些都是废话,因为都和C#类似.从模块开始就需要深入的去理解了 文档反复声明了 内部模块现在称做 命令空间 外部模块称为 模块 模块在其自身的作用域里执行,而不是在全局作用域里,也就是说模块内的变量函数类等在模 块外部是不可见的. 模块是自声明的,两个模块之间的关系是通过文件级别上使用 imports exports建立 模块使用模块加载器去导入其它的模块,像CommonJS、Require.JS 作用是执行此模块代码前 去查找并执行这个模块的做有依赖 */ /* 说了这么多,什么才是一个模块? 上面的话比较官方,通常我们的模块是一个ts文件,但是也 不是说一个文件就是一个真正意义上的模块,前提是文件中包含任何顶级的import或者export 才是一个模块 */ /* 从最基础的导出开始 在一个模块中,我们要将需要被访问访问的 类、函数等使用 export关键字导出 */ interface interfaceExport { }; class classExport { }; //进行导出 如果对名称不满意可以使用 as 语法重命名 比如 classExport as newName export { interfaceExport, classExport as newClassName}; /* 当我们需要在另一个模块中只导出其它模块的部分内容, 可以使用重新导出 语法 exprot from '模块名称' 直译就是导出一个东西,但是它不是我的,它from自xx模块 export { interfaceExport : newinterfaceExport } from "./模块"; export * from "模块名称" * 代表所有内容 * 默认导出,模块可以有一个且只能有一个默认导出.default 的好处在哪里? 对默认的导出在导入时可以忽略其名称 语法 export default */ /* 导入也是非常简单的,使用 import 可以轻松进行导入,格式 import {名称} from '模块' * 如果模块内导出的太多, 一个一个的进行improt是非常麻烦的可以使用 import * as NewName from '模块' 意思是导入'模块'中所有被导出的,NewName做为它们的根 */ /* 需要嗨皮的是,导入是懒加载的.也就是只有在使用的时候才去真正的加载,对于一些导入了 但是并没有进行使用的是不会去加载的,这无疑提高了性能 */ //简单提一下,文件可以定义成.D.TS文件,导出的时候可以自定义名称 declare model "Name"{ export ....}
/* 相信对于命名空间NameSpaced大家都很熟悉,可以很方便的管理我们的类.现在TypeScript中 也有了命名空间 一般来说命名空间是无需使用的,因为我们有模块的概念,一个文件就是一个模块,一般来说这 是够用的 但是随着功能越来越多放到一个文档是不合适的,我们需要拆分成不同的文件.这时候使用命 名空间管理是最佳选择 */ --- 命名空间.ts namespace testNameSpace { export function fun1() { }; } 上面是命名空间.ts下的内容,里面有一个命名空间 testNameSpace ---命名空间2.ts namespace testNameSpace { export function fun2() { }; } 然后在命名空间2.ts下继续在testNameSpace命名空间下添加方法 ---test.ts //使用testNameSpace空间下的fun1方法 testNameSpace.fun1(); 实际上命名空间是一个普通的JavaScript对象,并且可以在多个文件使用,不需要导入。这听起来就是全局的,所以命名空间是不被推荐使用的,模块才是真爱