MST

星途 面试题库

面试题:TypeScript模块解析策略演进之基础

在TypeScript早期版本中,模块解析有哪些常见的策略?它们是如何根据文件路径和模块导入语句来定位模块的?请举例说明。
31.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

1. 经典解析策略(Classic Resolution)

  • 策略描述:在经典解析策略中,TypeScript 会从导入语句的相对路径开始查找模块。如果是相对路径(如 ./module../module),它会相对于导入该模块的文件所在的目录进行查找。如果是基于根目录的路径(如 /module),则会从项目根目录开始查找。
  • 定位方式:假设项目结构如下:
project/
├── src/
│   ├── main.ts
│   └── utils/
│       └── helper.ts

main.ts 中导入 helper.ts

import { someFunction } from './utils/helper';

TypeScript 会从 main.ts 所在目录开始,按照相对路径 ./utils/helper 查找,先找 helper.ts 文件,如果不存在则找 helper.d.ts 文件(用于声明文件),若还找不到,会查找 helper 目录下的 index.tsindex.d.ts 文件。

2. 节点解析策略(Node Resolution)

  • 策略描述:模拟 Node.js 的模块解析机制。当遇到相对路径导入(如 ./module)时,与经典解析类似,从导入文件所在目录开始查找。对于非相对路径(如 module),它会先在导入文件所在目录的 node_modules 文件夹中查找该模块。如果没找到,会沿着目录树向上一级目录的 node_modules 查找,直到项目根目录。如果在项目根目录的 node_modules 也没找到,解析失败。
  • 定位方式:假设项目结构如下:
project/
├── src/
│   ├── main.ts
│   └── node_modules/
│       └── some - library/
│           └── index.ts

main.ts 中导入 some - library

import { someFeature } from'some - library';

TypeScript 会先在 src 目录下的 node_modules 中查找 some - library,找到后,会在 some - library 目录中查找 index.tsindex.d.ts 文件。如果 src/node_modules 中没有,会向上到 project/node_modules 中查找。