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

При построении программы, если установлены outDir и rootDir, tsc выдаст ошибку, если есть импорт модуля за пределами 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 отсутствует функция.
0
Jason Kuhrt 14 Апр 2020 в 22:53

1 ответ

Лучший ответ

Убедитесь, что вы проверяете диагностику программы. Я могу получить описанную вами диагностику, установив флажок 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";
         ~~~~~~~~~~~~~~~~~~
1
David Sherret 15 Апр 2020 в 15:19