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

Posted

技术标签:

【中文标题】即使未导入 typescript 声明文件也会被处理【英文标题】:typescript declaration file is processed even when it is not imported 【发布时间】:2021-05-01 12:07:36 【问题描述】:

我试图了解声明合并的行为。 我创建了一个声明文件,重新声明了模块的一个函数接口。 npm 模块 'schemavalidator' 有自己的类型。

我仅将此模块用作演示行为的示例。这个问题与 schemavalidator 模块有关。

我注意到即使我不导入我的声明文件,打字稿仍然使用它。

我要做的是仅在使用 import 语句导入自定义声明文件时才使用它。

这是我的 2 个文件

首先是我的自定义声明文件。在这里,我首先从 npm 模块 jsonschema 重新导出所有内容。 其次我只重新定义了一个函数接口。

这是我的文件,它使用了这个重新定义的 CustomFormat 接口。请注意,我没有在任何地方导入 mytypes 文件。

请注意,IDE 已经在抱怨类型错误。 在运行 tsc 命令的地方,我从打字稿编译器收到错误

所以我很清楚,我在 mytypes.ts 中声明的自定义声明由 typescript 处理,即使文件 mytypes.ts 没有在我的程序的任何地方导入。

这不是我想要达到的目标。我希望仅当在 schemavalidator 文件中使用 import 语句导入 mytypes 时才重新定义定义,并且在所有其他文件中它应该使用 npm 模块附带的定义。

有可能吗? 导入'../mytypes'

【问题讨论】:

【参考方案1】:

声明文件可以包含关键字declare,这意味着它是全局声明的。在整个项目中,该模块是可访问的。

替换这个:

declare module

用这个:

export module

在非模块项目中使用声明,例如在浏览器(Babel 编译器)或其他带有 TS 的 JS 实现中。

我不能说使用declare 是不好还是好的做法。人们也使用这个:

export declare module "myModule" 
  export const constant = "I am global and I can be part of import";

尝试了解使用什么:

示例:使用自己的库创建在线编码游乐场。

解决方案:declare

示例:适用于许多平台的开源项目。

解决方案:export declare

示例:创建 TypeScript React 应用程序供个人或生产使用

解决方案:export

请参阅TypeScript Documentation 了解更多信息。

【讨论】:

以上是关于即使未导入 typescript 声明文件也会被处理的主要内容,如果未能解决你的问题,请参考以下文章

如何从 React Typescript 的整个项目中删除未使用的导入/声明?

即使使用 if 语句,对象也可能未定义

NextJS Typescript - 设置 tslint 配置以在有未使用的导入/声明时强制出错

TypeScript 阻止文件成为模块?

打字稿。导入“模块/子目录”npm 包时未找到环境声明

如何将其他类型导入我的 TypeScript 自定义声明文件?