模块依赖关系组织
- 文件夹结构:按照功能或业务逻辑将模块划分到不同文件夹。例如,创建
src
文件夹,在其中分别为 A
、B
、C
、D
模块创建对应的文件夹。模块 A
放在 src/A
下,模块 B
放在 src/B
下,模块 C
放在 src/C
下,模块 D
放在 src/D
下。这样可以清晰地看到各个模块的位置及所属关系。
- 明确依赖路径:在模块
A
中,明确导入模块 B
和 C
的相对路径。比如,若模块 A
的文件名为 a.ts
,模块 B
的文件名为 b.ts
,且 A
和 B
在同一层级的不同文件夹下,那么在 a.ts
中导入 B
可以写成 import { BExported } from '../B/b';
(假设 B
导出了 BExported
)。同理导入 C
。在模块 B
中导入 D
时也遵循类似规则,明确相对路径,比如 import { DExported } from '../D/d';
。
- 避免循环依赖:确保模块之间不存在循环依赖。在这个例子中,
A
依赖 B
和 C
,B
依赖 D
,只要 B
、C
、D
不反过来依赖 A
,并且 D
不依赖 B
(或其他可能形成循环的情况),就不会出现循环依赖问题。
TypeScript 常用导入导出方式及使用
- 默认导出与导入:
- 导出:在模块
B
中,可以使用默认导出。例如在 b.ts
中:
const myBFunction = () => {
// 函数逻辑
};
export default myBFunction;
- **导入**:在模块 `A` 中导入模块 `B` 的默认导出:
import myBFunction from '../B/b';
myBFunction();
- 命名导出与导入:
export const dValue = 42;
export function dFunction() {
// 函数逻辑
}
- **导入**:在模块 `B` 中导入模块 `D` 的命名导出:
import { dValue, dFunction } from '../D/d';
console.log(dValue);
dFunction();
- 整体导入:有时可能需要将模块的所有导出作为一个对象导入。例如模块
C
有多个导出:
export const cValue1 = 'value1';
export const cValue2 = 'value2';
- **导入**:在模块 `A` 中:
import * as CModule from '../C/c';
console.log(CModule.cValue1);
console.log(CModule.cValue2);