为何ts-morph无法获取TypeScript项目中的类?
解决ts-morph无法获取AntV X6类的问题
常见原因及修复方案
1. 未明确指定要加载的文件类型
ts-morph默认仅识别.ts/.tsx文件,但如果未配置include规则,可能无法扫描到目标目录下的所有源码文件。可以通过添加目录时指定匹配规则解决:
import { Project } from "ts-morph"; const project = new Project(); project.addDirectoryAtPath("/Users/john/github_repo/@antv/X6/packages/", { include: ["**/*.ts", "**/*.tsx"], // 明确包含所有TS/TSX源码文件 exclude: ["**/*.d.ts", "**/node_modules/**"] // 排除类型声明文件和依赖目录 }); const classes = project.getSourceFiles().flatMap(sourceFile => sourceFile.getClasses()); console.log("classes: ", classes);
2. 未结合项目的tsconfig.json初始化
直接添加目录可能无法正确解析项目的源码结构,建议使用X6根目录的tsconfig初始化项目,ts-morph会自动读取配置中的文件包含规则:
import { Project } from "ts-morph"; // 用X6项目的tsconfig初始化,自动加载配置内的所有源码文件 const project = new Project({ tsConfigFilePath: "/Users/john/github_repo/@antv/X6/tsconfig.json" }); const classes = project.getSourceFiles().flatMap(sourceFile => sourceFile.getClasses()); console.log("classes: ", classes);
3. 路径大小写或路径错误
检查目标路径是否准确,比如系统是大小写敏感的(如macOS/Linux),需确认@antv/X6是否和实际目录的大小写一致(比如实际是@antv/x6)。
4. 未触发源码文件解析
如果目录下文件较多,可手动调用resolveSourceFiles()确保所有文件被加载解析:
project.addDirectoryAtPath("/Users/john/github_repo/@antv/X6/packages/"); project.resolveSourceFiles(); // 强制解析所有匹配的源文件 const classes = project.getSourceFiles().flatMap(sourceFile => sourceFile.getClasses()); console.log("classes: ", classes);
验证步骤
先确认是否加载到了源文件,排查路径或规则问题:
const sourceFiles = project.getSourceFiles(); console.log("加载的源文件数量:", sourceFiles.length); // 若数量为0,说明路径或include规则配置错误
内容的提问来源于stack exchange,提问作者qg_java_17137
相关产品推荐
相关产品推荐

