面试题答案
一键面试利用 import
和 export
设计模块依赖关系
- 拆分功能模块:
将不同功能分离到独立的文件中,比如创建一个
user.ts
文件用于处理用户相关功能,在其中可以定义用户数据结构、用户相关操作函数等,然后通过export
导出这些内容。
// user.ts
export interface User {
name: string;
age: number;
}
export function getUser(): User {
return { name: 'John', age: 30 };
}
在其他需要使用这些功能的模块中,通过 import
导入:
// main.ts
import { User, getUser } from './user.ts';
const user = getUser();
console.log(user);
- 跨模块状态管理:
对于状态管理,创建专门的状态管理模块,例如
store.ts
。将共享状态和修改状态的方法导出。
// store.ts
let count = 0;
export function increment() {
count++;
}
export function getCount() {
return count;
}
其他模块按需导入使用:
// anotherModule.ts
import { increment, getCount } from './store.ts';
increment();
console.log(getCount());
- 共享功能模块:
把常用的共享功能,如工具函数,放到一个独立模块,例如
utils.ts
。
// utils.ts
export function add(a: number, b: number): number {
return a + b;
}
各模块导入使用:
// someModule.ts
import { add } from './utils.ts';
const result = add(1, 2);
console.log(result);
动态导入的应用场景和优势
- 应用场景:
- 路由懒加载:在大型单页应用中,路由组件可能很多。使用动态导入可以实现路由组件的懒加载,只有在需要显示该路由页面时才加载对应的组件,从而提高应用的初始加载性能。
- 按需加载功能模块:对于一些不常用的功能模块,如报表生成功能,只有当用户点击特定按钮需要使用该功能时才加载相关模块,避免初始加载时加载过多不必要的代码。
- 优势:
- 提高加载性能:减少初始加载的代码体积,加快应用启动速度。
- 代码分割:使代码结构更清晰,便于维护和管理不同功能模块。
动态导入代码示例
- 路由懒加载示例(使用 React Router 和 TypeScript):
import React from'react';
import { BrowserRouter as Router, Routes, Route } from'react-router-dom';
const Home = React.lazy(() => import('./Home.tsx'));
const About = React.lazy(() => import('./About.tsx'));
function App() {
return (
<Router>
<Routes>
<Route path="/" element={
<React.Suspense fallback={<div>Loading...</div>}>
<Home />
</React.Suspense>
} />
<Route path="/about" element={
<React.Suspense fallback={<div>Loading...</div>}>
<About />
</React.Suspense>
} />
</Routes>
</Router>
);
}
export default App;
- 按需加载功能模块示例:
// main.ts
const loadFeature = async () => {
const { featureFunction } = await import('./featureModule.ts');
featureFunction();
};
document.getElementById('loadFeatureButton').addEventListener('click', loadFeature);
// featureModule.ts
export function featureFunction() {
console.log('This is a dynamically imported feature function.');
}