【发布时间】:2020-03-19 05:03:53
【问题描述】:
我正在使用https://lerna.js.org 在一个monorepo 中写a library called bexer 和许多包(@bexer/*)。
每个包都包含在 JSDoc cmets 中定义的 typescript 类型。
任务是在使用我的库的项目中使用这些类型。
- 我认为我必须生成将被目标项目使用的类型声明 (
*.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 - 错误 TS7016:找不到模块“@bexer/utils”的声明文件。 '/home/ilyaigpetrov/Projects/bexer/packages/bexer-types/node_modules/@bexer/utils/esm/index.js' 隐含了一个 'any' 类型。
尝试npm install @types/bexer__utils(如果存在)或添加包含declare module '@bexer/utils';的新声明(.d.ts)文件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')
}
【问题讨论】:
标签: typescript jsdoc