создайте d.ts программно (в памяти)

#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:

Чтобы сгенерировать его программно, вам потребуется:

  1. Настройка a ts.Program на основе файла tsconfig.json.
  2. Запустите программу, вызвав Program#emit emitOnlyDtsFiles значение set to true , и предоставьте пользовательский 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