MST

星途 面试题库

面试题:TypeScript模块的复杂导入导出场景分析

有一个项目结构如下:`src`目录下有`utils`子目录,`utils`中有`stringUtils.ts`和`numberUtils.ts`,`stringUtils.ts`导出了`capitalize`函数,`numberUtils.ts`导出了`square`函数。`src`目录下还有`main.ts`。现在要求在`main.ts`中创建一个新模块`allUtils.ts`,将`stringUtils.ts`和`numberUtils.ts`的功能重新导出,然后在`main.ts`中导入`allUtils.ts`并使用其中的函数。请写出完整代码,并说明如何处理模块之间的依赖关系和避免循环引用。
49.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

1. stringUtils.ts代码

export const capitalize = (str: string): string => {
    return str.charAt(0).toUpperCase() + str.slice(1);
};

2. numberUtils.ts代码

export const square = (num: number): number => {
    return num * num;
};

3. allUtils.ts代码

import { capitalize } from './utils/stringUtils';
import { square } from './utils/numberUtils';

export { capitalize, square };

4. main.ts代码

import { capitalize, square } from './allUtils';

const result1 = capitalize('hello');
const result2 = square(5);

console.log(result1); 
console.log(result2); 

处理模块之间的依赖关系和避免循环引用

  1. 处理依赖关系
    • 在TypeScript中,通过import语句来明确指定模块间的依赖。例如在allUtils.ts中,使用import { capitalize } from './utils/stringUtils';import { square } from './utils/numberUtils';来引入所需的函数。这种方式清晰地表明了allUtils.ts依赖于stringUtils.tsnumberUtils.ts
    • main.ts中,通过import { capitalize, square } from './allUtils';表明main.ts依赖于allUtils.ts
  2. 避免循环引用
    • 尽量保持模块依赖关系的单向性。在本项目结构中,main.ts依赖allUtils.tsallUtils.ts依赖stringUtils.tsnumberUtils.ts,不存在循环引用。
    • 如果不小心出现循环引用,TypeScript在编译时可能不会报错,但在运行时会出现未定义或意外的行为。为避免这种情况,要审视模块的设计,确保功能划分合理,每个模块职责单一,避免模块之间互相依赖。例如,如果发现两个模块有相互依赖的倾向,可以考虑将共同的部分提取到一个新的独立模块中。