在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
转载至:https://blog.csdn.net/tkokof1/article/details/108984865 平时编写 TypeScript 代码时,一般都倾向于使用模块(Module),通过结合使用 import 和 export 我们便可以方便的进行模块的导入和导出. 举个简单的例子,假设我们有以下的 TypeScript 代码文件(A.ts): export class A { // methods here }
import { A } from "./A.ts" class B { // use A here }
接着我们让代码变的复杂一些,假设现在类型 A 也要使用类型 B 了,那么相关的代码可能会变成这样: import { B } from "./B.ts" export class A { // use B here } import { A } from "./A.ts" export class B { // use A here }
此时,类型 A 与 类型 B 便产生了循环引用,一般来讲是应该尽量避免的,但是在较大型的项目中往往又很难规避,所以我们需要一种可以处理循环引用问题的方法(之前关于这个话题自己也写过一篇博文),而实际上,TypeScript 中的 import 和 export 是可以处理循环引用的: 当 import 遇到导入完毕或者说正在导入的模块(文件)时,是直接返回导入结果的(尽管这个结果可能是不完整的),而不是递归的进行模块的导入操作,还是拿上面的代码举例,假设我们首先导入 A 模块: A 模块尝试导入 B 模块 考虑下面的循环引用情况: import { C } from "./C.ts" export class A { // use C here } import { A } from "./A.ts" export class B extends A { // methods here } import { B } from "./B.ts" export class C extends B { // methods here }
假设我们首先导入 A.ts,我们来分析下导入流程: A 模块尝试导入 C 模块 就上面的例子来讲,我们可以这么修改代码: export class A { // use C here } // put import after export import { C } from "./C.ts" import { A } from "./A.ts" export class B extends A { // methods here } import { B } from "./B.ts" export class C extends B { // methods here }
我们再来分析下上面代码的导入流程(仍然假设首先导入 A.ts): A 模块将类型 A 加入到 A 模块的导出数据中(export class A) B 模块尝试导入 A 模块 |
请发表评论