#typescript #typescript-compiler-api
Вопрос:
Я знаю, что мы могли бы использовать tsc --declaration --emitDeclarationOnly --outFile index.d.ts
для создания файла декларации. Но как я могу сгенерировать его программно? Например:
import ts from 'typescript'
const dts = await ts.generateDdeclaration(/* tsconfig.json */);
// then do some stuff with dts, like in webpack plugin
Я не хочу, чтобы d.ts выводился в файл. Я немного застрял и не знаю, с чего начать
Ответ №1:
Чтобы сгенерировать его программно, вам потребуется:
- Настройка a
ts.Program
на основе файла tsconfig.json. - Запустите программу, вызвав
Program#emit
emitOnlyDtsFiles
значение set totrue
, и предоставьте пользовательскийwriteFile
обратный вызов для записи выходных данных в память.
Вот пример использования @ts-morph/bootstrap
, потому что я понятия не имею, как легко настроить программу с помощью файла tsconfig.json, используя только API компилятора TypeScript (это требует много кода из моего понимания, и это проще):
// or import as "@ts-morph/bootstrap" if you're using node/npm
import {
createProjectSync,
ts,
} from "https://deno.land/x/ts_morph@12.0.0/bootstrap/mod.ts";
const project = createProjectSync({
tsConfigFilePath: "tsconfig.json",
});
const files = new Map<string, string>();
const program = project.createProgram();
program.emit(
undefined,
(fileName, data, writeByteOrderMark) => {
if (writeByteOrderMark) {
data = "uFEFF" data;
}
files.set(fileName, data);
},
undefined,
/* emitOnlyDtsFiles */ true,
// custom transformers could go here in this argument
);
// use files here