首页 > 解决方案 > 如果我所有的导入都来自我自己的文件,我是否需要使用 TypeScript 3.8 的“导入类型”功能?

问题描述

我有一个简单的文件types.ts,它定义了一些类型:

export interface MyInterface {
   // ...
}

export const enum MyEnum {
   // ...
}

export type MyType = {
  // ...
}

我在这里import type阅读了最新打字稿的新功能。据我了解,它旨在解决从 .js 文件导入时似乎主要发生的特定问题。

我可以使用importandimport type语句导入我的类型。两者似乎都工作得很好。问题是我应该更喜欢import type更明确并帮助我避免一些理论上的边缘情况问题,还是我可以import为了简单起见并依赖于import elision从编译代码中删除这些问题?

换句话说:在import type这里使用有什么好处,还是应该将其用于特定情况以解决import elision缺点?

标签: typescriptimportmoduleelisiontypescript3.8

解决方案


简短的回答:通过使用import typeexport type语句更明确似乎可以通过防止边缘情况问题产生可解释的好处,并为当前和即将推出的工具提供更好的基础,以通过类型定义分析提高处理性能和可靠性

长答案:

正如TypeScript 3.8 发行说明所说:

import type仅导入用于类型注释和声明的声明。它总是被完全擦除,因此在运行时没有任何残留。同样,导出类型仅提供可用于类型上下文的导出,并且也会从 TypeScript 的输出中删除。

以下是两个实际示例,这些残余导入如何导致构建或运行时错误:

另一个好处与分析类型定义的工具有关。目前有关于使用 Babel 的捆绑器设置的好处的详细信息,但目前或以后可能也有利于其他工具(如 IDE 性能)。

对于 Babel 用户手动配置他们的设置:如果您在捆绑器设置中使用 Babel 7.9=> 和 TS 3.8=>,那么您可以删除以前需要的@babel/plugin-transform-typescript插件。

对于那些使用预先构建的 Babel 预设的设置:Babel 的团队建议配置 Babel 预设,以便使用显式的仅类型导入。

在博客文章中阅读更多内容:Babel 7.9 减少了 Bundle 大小,添加了 TypeScript 3.8 支持

更多关于在 TS 文档中使用 Babel 和 TypeScript的相关信息。

详细了解使用和isolatedModulesTS 编译器选项如何工作的好处type-only imports — 一项使 Babel 用户受益的新 TypeScript 功能


推荐阅读