Я работаю с 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 не выполняет эту проверку.
Я не знаю, если:
- Я делаю что-то не так
- Ошибка в TS API
- В TS API отсутствует функция.
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";
~~~~~~~~~~~~~~~~~~
Похожие вопросы
Новые вопросы
typescript
TypeScript - это типизированный надмножество JavaScript, которое компилируется в простой JavaScript. Он добавляет в JavaScript дополнительные типы, классы, интерфейсы и модули. Этот тег предназначен для вопросов, относящихся к TypeScript. Он не используется для ответов на общие вопросы по JavaScript.