从模块导入“私有”TypeScript 声明而不通过 package.json 公开它

Posted

技术标签:

【中文标题】从模块导入“私有”TypeScript 声明而不通过 package.json 公开它【英文标题】:Importing "private" TypeScript declaration from module not exposing it though package.json 【发布时间】:2021-06-04 14:33:07 【问题描述】:

当导入一个没有被它的 package.json 暴露的 npm 模块的组件时

import Toolbar from "@atlaskit/editor-core/dist/esm/ui/Toolbar";

tsc / webpack 找不到正确的声明文件。

来源和类型可在以下位置获得:

node_modules/@atlaskit/editor-core/dist/esm/ui/Toolbar/Toolbar.js
node_modules/@atlaskit/editor-core/dist/types/ui/Toolbar/Toolbar.d.ts

如何正确链接声明并防止

TS7016:找不到模块“@atlaskit/editor-core/dist/esm/ui/Toolbar”的声明文件。 '.../node_modules/@atlaskit/editor-core/dist/esm/ui/Toolbar/index.js' 隐含了一个 'any' 类型。

【问题讨论】:

【参考方案1】:

因为包有声明文件,所以很容易连接深度导入以使用它的类型。

typings.d.ts 声明文件添加到您的项目以添加环境模块声明:

// assert that an import module of this path HAS types
declare module '@atlaskit/editor-core/dist/esm/ui/Toolbar' 
  // assert that this module contains all exports of the existing declaration file
  export * from '@atlaskit/editor-core/dist/types/ui/Toolbar';

Relevant Stackblitz

【讨论】:

太棒了!我很接近,但我想我永远不会想到这一点!非常感谢!

以上是关于从模块导入“私有”TypeScript 声明而不通过 package.json 公开它的主要内容,如果未能解决你的问题,请参考以下文章

仅导入 typescript 模块声明

即使未导入 typescript 声明文件也会被处理

Webpack:“通常”和作为原始字符串导入 TypeScript 模块

typeScript声明文件的一个注意点:不能使用导入导出语法

Ionic2 Typescript Twilio

LayaBox---TypeScript---模块