Как сделать, чтобы не было проверки 'rootDir' с TS API? - PullRequest
0 голосов
/ 14 апреля 2020

Я работаю с TypeScript API (3.8). Я заметил, что есть проверка, что tsc делает то, чего не кажется TS API.

При сборке программы, и если установлены outDir и rootDir, ts c выдаст ошибку, если есть импорт модуля вне rootDir, пример:

❯ 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 отсутствует функция

1 Ответ

1 голос
/ 14 апреля 2020

Убедитесь, что вы проверяете диагностику в программе. Я могу получить диагноз c, который вы описываете, проверив 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";
         ~~~~~~~~~~~~~~~~~~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...