面试题答案
一键面试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.ts
或 index.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.ts
或 index.d.ts
文件。如果 src/node_modules
中没有,会向上到 project/node_modules
中查找。