使用从 JSDoc 生成的类型声明:TS7016

Consuming types declarations generated from JSDoc: TS7016

我正在写a library called bexer with many packages (@bexer/*) in one monorepo using https://lerna.js.org
每个包都包含在 JSDoc 注释中定义的打字稿类型。
任务是在使用我的库的项目中使用这些类型。

  1. 我想我必须生成类型声明 (*.d.ts),它将被目标项目使用。
  2. 我使用 typescript@3.7.3-insiders.20191118 和以下 tsconfig.json 生成类型声明:
{
  "compilerOptions": {

    "noEmit": false,
    "declaration": true,
    "emitDeclarationOnly": true,
    "declarationDir": "./packages/bexer-types",

    "noImplicitAny": true,
    "strictNullChecks": true,
    "allowJs": true,
    "checkJs": true,

    "target": "ESNext",
    "moduleResolution": "Node"
  },
  "types": [
    "chrome"
  ],
  "include": [
    "./packages/**/*"
  ],
  "exclude": [
    "./packages/rollup.config.js",
    "./packages/**/iife/*",
    "./packages/bexer-types/bexer-*"
  ]
}
  1. 在目标项目中我使用了下面的tsconfig.json:
{
  "compilerOptions": {
    "noEmit": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "allowJs": true,
    "checkJs": true,

    "target": "ESNext",
    "moduleResolution": "Node"
  },
  "types": [
    "chrome"
  ],
  "include": [
    "./src/**/*",
    "./node_modules/@bexer/components/**/*",
    "./node_modules/@bexer/types/**/*"
  ],
  "exclude": [
    "./node_modules/@bexer/**/iife",
    "./node_modules/@bexer/types/node_modules"
  ]
}
  1. 在目标项目中启动 tsc 后,我得到这样的错误:

node_modules/@bexer/types/bexer-index/esm/index.d.ts:18:24 - error TS7016: Could not find a declaration file for module '@bexer/utils'. '/home/ilyaigpetrov/Projects/bexer/packages/bexer-types/node_modules/@bexer/utils/esm/index.js' implicitly has an 'any' type.
Try npm install @types/bexer__utils if it exists or add a new declaration (.d.ts) file containing declare module '@bexer/utils';

18 import * as Utils from "@bexer/utils";

因此 types/bexer-index 中的 index.d.ts 具有如下导入:
import * as Utils from "@bexer/utils"; 无法在 @bexer/types/bexer-utils/esm/index.d.ts 处找到类型声明,TypeScript 建议将 declare module '@bexer/utils'; 添加到声明文件。

然而,手动将 declare module... 添加到 @bexer/types/bexer-utils/esm/index.d.ts 并不能消除此错误。

我的问题:

  1. 我生成类型声明的方法是否是从 JSDoc 使用类型的正确方法?
  2. 在目标项目中使用生成的@bexer/types的正确方法是什么?

UPD: 在目标项目中,我有 globals.d.ts 内容:

interface Window {
  Bexer: typeof import('@bexer/types/bexer-index/esm/index')
}

我找到的唯一解决方案是:

  1. 不要将所有类型声明作为单独的包发布,仅将共享类型声明作为单独的包发布。
  2. 在每个已发布的包中放置类型声明:例如@bexer/index/esm/index.js 应该伴随着 @bexer/index/esm/index.d.ts.