typescript - 如何使用 TS API 检查不在“rootDir”下?
问题描述
我正在使用 TypeScript API (3.8)。我注意到有一个检查tsc
使得 TS API 似乎没有。
在构建程序时,如果设置了 outDir 和 rootDir,如果在 rootDir 之外导入了模块,则 tsc 会报错,例如:
❯ yarn -s tsc --outDir dist
api/app.ts:3:8 - error TS6059: File '/Users/jasonkuhrt/hello/services/boo.ts' is not under 'rootDir' '/Users/jasonkuhrt/hello/api'. 'rootDir' is expected to contain all source files.
3 import '../services/boo'
~~~~~~~~~~~~~~~~~
Found 1 error.
但是,TS API 不会进行此检查。
我不知道是否:
- 我做错了什么
- TS API 中存在错误
- TS API 中缺少一个功能
解决方案
确保您正在检查程序上的诊断程序。我可以通过检查获得您描述的诊断ts.getPreEmitDiagnostics(program)
。
复制代码
这是一些使用的复制代码@ts-morph/bootstrap
:
import { createProjectSync, ts, InMemoryFileSystemHost } from "@ts-morph/bootstrap";
// file system setup
const fileSystem = new InMemoryFileSystemHost();
fileSystem.writeFileSync("/tsconfig.json", `{
"compilerOptions": {
"rootDir": "src",
"outDir": "dist"
}
}`);
fileSystem.writeFileSync("/src/file.ts", `import "../otherDir/file";`);
fileSystem.writeFileSync("/otherDir/file.ts", `export class Test {}`);
// create project and program
const project = createProjectSync({
tsConfigFilePath: "./tsconfig.json",
fileSystem,
});
const program = project.createProgram();
// output diagnostics
const diagnostics = ts.getPreEmitDiagnostics(program);
console.log(project.formatDiagnosticsWithColorAndContext(diagnostics));
输出:
src/file.ts:1:8 - error TS6059: File '/otherDir/file.ts' is not under 'rootDir' '/src'.
'rootDir' is expected to contain all source files.
1 import "../otherDir/file";
~~~~~~~~~~~~~~~~~~
推荐阅读
- recursion - 优化排序列表中的查找
- javascript - 收集部分保存实现的请求
- python - 如何在python中设置多维数组中对象的属性?
- javascript - 为什么 Browserify 不能与 fs.readFileSync 一起使用?
- boost - Boost Graph Library,鄂尔多斯仁义生成器。图总是有相同数量的边
- python - 如何使用 Bokeh 在每一行中添加标签
- c - scanf 接受一个带空格的字符串,然后接受一个字符
- r - 从 ggplot geom_crossbar 中删除等高线
- sql - 从 SQL DDL 语句的现有表中筛选列名
- python-3.x - Telebot API Python3