命名空间
使用立即执行的函数表达式是最常用的实现命名的方法。原因是立即执行函数创建的作用域不会对外层作用域有影响。命名空间是通过namespace
关键字声明的。命名空间声明的名字可以使用点符号。命名空间内部可以使用函数声明、变量声明、接口声明和命名空间声明等。默认情况下,命名空间内部的声明只能在内部使用,在外面访问内部的声明会产生错误。如果我们想要在外部使用内部的声明,我们可以使用export
关键字。在导出命名空间时,我们需要使用命名空间名和导出声明名并且用点符号连接。
namespace People.Utils {
function isString(value: any) {
return typeof value === 'string'
}
}
当我们使用命名空间名字较长时,我们可以使用别名来简化代码。别名导入看起来只是声明一个变量但是这个别名导入对类型也有效。在命名空间中我们可以将同一个命名空间声明拆分到不同的文件中。当命名空间拆分到不同的文件后,我们需要注意文件的加载顺序。定义文件间的依赖关系可以使用tsconfig.json
文件和三斜线指令
。其中tsconfig.json
能够定义文件间的加载顺序。而三斜线指令可以定义文件间的依赖。
namespace People {
export function isString(value: any) {
return typeof value === 'string'
}
}
模块
CommonJS
使用require语句来声明模块的依赖,然后通过exports
语句导出模块内的声明。AMD模块
和commonjs一样,可以在一个文件中同时定义多个模块。UMD模块
也是致命模块系统的一种。
模块导出有命令模块导出和默认模块导出。其中命名模块导出使用的是自定义的标识符名来区分导出声明。我们在一个模块中可以同时存在多个命名模块导出。我们需要注意的是,我们进行命令模块导出的时候,一次只能导出一个声明。而对于命名模块导出列表能够一次性导出多个声明。命名模块导出语句和命名模块导出列表语句可以同时使用。在一个模块中可以同时存在多个命名导出列表的语句。默认模块使用export default
关键字,默认导出可以导出匿名的函数和类。
export var x = 6;
export let y = 7;
export const z = 9;