在看 typeScript的模块这个节的时候,我觉得这个导入导出是个非常神奇的事情。之前一般的js都是通过js标签的src属性来引入js文件的,从而加载进相应的js程变量,函数方法什么的。后来出现模块化的概念,从模块化这个名词又开始向命名空间这个概念转。简单的来讲,我觉得所谓的模块,其实就是每个单独的文件。我们要导入某个模块实际也就是引入某个文件夹一样,而这跟之前纯粹的通过js标签引入js文件应该是同一个道理,只是概念上有了改变。
在看typescript的官网文档的 模块导入导出的时候,讲到一个重新导出 ,我觉得很神奇,我开始觉得,只能在当前的文件里导出当前文件的内容,比如导出 变量,导出 语句的那些写法,都是在本模块文件里面导出本文件里的内容的。但是这里的 讲到的重新导出,我看他是意思好像是,能够在其自身的文件里控制导出其他模块里的内容。我觉得太神奇了。既然本文件里面导出的内容能被其他文件中相应的导出语句所改变,那名字一改,这导出的东西名称会不会有冲突?
而后来导入里面有个地方不是很理解。
import * as validator from "./ZipCodeValidator";
let myValidator = new validator.ZipCodeValidator();
在这里 new 这个词我该怎样理解???
new配合构造函数的的调用 本来是实例化对象的意思,在这里我的理解只能是,通过new 他把整个引入的文件当成个对象,自然里面的 变量,函数方法什么的就成了他的属性了。所以才能这样写new validator.ZipCodeValidator();
我也是ts初学者,我说说我的理解
其实ts的导入导出,和ES6是很像的,你说的重新导出,其实就是ES6中的
export xxx from '/xxx'
,我不一定需要这个模块全部的功能啊,我可能只要一部分如果是CommonJS风格,那就是这种
require 'xxx'
,它就必需引入全部代码了,你可以参考阮一峰的ES6入门然后你说的第二个问题,其实
validator
是模块名,ZipCodeValidator()
就是其中的一个构造函数,模块其实不一定是个对象,可能是函数,可能是字符串,甚至可能就只是个数字,但这里它没错就是个对象,而且一般我们都是export
一个对象