使用从 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 注释中定义的打字稿类型。
任务是在使用我的库的项目中使用这些类型。
- 我想我必须生成类型声明 (
*.d.ts
),它将被目标项目使用。
- 我使用
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-*"
]
}
- 在目标项目中我使用了下面的
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"
]
}
- 在目标项目中启动
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
并不能消除此错误。
我的问题:
- 我生成类型声明的方法是否是从 JSDoc 使用类型的正确方法?
- 在目标项目中使用生成的@bexer/types的正确方法是什么?
UPD:
在目标项目中,我有 globals.d.ts
内容:
interface Window {
Bexer: typeof import('@bexer/types/bexer-index/esm/index')
}
我找到的唯一解决方案是:
- 不要将所有类型声明作为单独的包发布,仅将共享类型声明作为单独的包发布。
- 在每个已发布的包中放置类型声明:例如
@bexer/index/esm/index.js
应该伴随着 @bexer/index/esm/index.d.ts
.
我正在写a library called bexer with many packages (@bexer/*
) in one monorepo using https://lerna.js.org。
每个包都包含在 JSDoc 注释中定义的打字稿类型。
任务是在使用我的库的项目中使用这些类型。
- 我想我必须生成类型声明 (
*.d.ts
),它将被目标项目使用。 - 我使用
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-*"
]
}
- 在目标项目中我使用了下面的
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"
]
}
- 在目标项目中启动
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.
Trynpm install @types/bexer__utils
if it exists or add a new declaration (.d.ts) file containingdeclare 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
并不能消除此错误。
我的问题:
- 我生成类型声明的方法是否是从 JSDoc 使用类型的正确方法?
- 在目标项目中使用生成的@bexer/types的正确方法是什么?
UPD:
在目标项目中,我有 globals.d.ts
内容:
interface Window {
Bexer: typeof import('@bexer/types/bexer-index/esm/index')
}
我找到的唯一解决方案是:
- 不要将所有类型声明作为单独的包发布,仅将共享类型声明作为单独的包发布。
- 在每个已发布的包中放置类型声明:例如
@bexer/index/esm/index.js
应该伴随着@bexer/index/esm/index.d.ts
.