【问题标题】:generate d.ts programmatically (in memory)以编程方式生成 d.ts(在内存中)
【发布时间】:2021-10-09 11:42:03
【问题描述】:

我知道我们可以使用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 输出到文件中。我有点卡住了,不知道如何开始

【问题讨论】:

    标签: typescript typescript-compiler-api


    【解决方案1】:

    要以编程方式生成它,您需要:

    1. 基于 tsconfig.json 文件设置ts.Program
    2. 通过调用Program#emit 并将emitOnlyDtsFiles 设置为true 来发出程序,并提供自定义writeFile 回调以捕获内存中的输出。

    这是一个使用 @ts-morph/bootstrap 的示例,因为我不知道如何仅使用 TypeScript Compiler API 使用 tsconfig.json 文件轻松设置程序(根据我的理解,这需要大量代码,这更容易):

    // 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
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2013-10-18
      • 2015-04-10
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多