首页 > 解决方案 > 如何使用 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 不会进行此检查。

我不知道是否:

  1. 我做错了什么
  2. TS API 中存在错误
  3. TS API 中缺少一个功能

标签: typescripttypescript-compiler-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";
         ~~~~~~~~~~~~~~~~~~

推荐阅读