【问题标题】:How to create declaration file for library entrypoint如何为库入口点创建声明文件
【发布时间】:2021-11-06 04:45:19
【问题描述】:

我编写了一个由多个 ES6 模块组成的 npm 库,然后将它们捆绑到 1 个 js 文件中。结构如下:

src
  main.ts
  one.ts
  two.ts
  three.ts
  types
    index.d.ts
index.ts

index.ts 文件导入 main.ts 并导出,这是库的入口点。

当我创建 bundle d.ts 文件时会自动为每个文件创建并放在附近

two.ts
two.d.ts

我在其他库中看到只有 1 个 index.d.ts 文件用于库入口点,我怎样才能实现仅为入口点而不是为每个单独的 es6 模块生成声明文件?

另一个问题,我将所有接口保存在单独的文件中,并在需要时导入它们。喜欢:

import { someInterface } from './types'

const something: someInterface

这会产生另一个问题,这些导入会转到自动生成的 d.ts 文件,如下所示:

import { someInterface } from './types';
declare class someClass {
    someVar: string;
}

我希望 someInterface 仅作为文本包含,而不是作为导入。

还是我做错了什么?

【问题讨论】:

    标签: typescript npm


    【解决方案1】:

    想通了,为了使 1 个 d.ts 文件 gor 库入口点需要一个单独的 npm 包,我使用了dts-bundle-generator

    为了在为我使用的每个模块生成原始 d.ts 文件后从 webpack 运行它webpack-shell-plugin-next

    用法:

    // webpack.config.js
        
    ...
    plugins: [
        new WebpackShellPluginNext({
          onBuildEnd: {
            scripts: ['node ./node_modules/.bin/dts-bundle-generator -o dist/myLib.d.ts src/main.ts'],
            blocking: false,
            parallel: true,
          },
        }),
      ],
    ...
    

    这会为库入口点生成 1 个 d.ts 文件。

    对于导入的接口,需要从main.ts导入和导出,以便d.ts生成器可以将它们作为文本放入文件,而不是作为导入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      相关资源
      最近更新 更多