广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >TypeScript中import type与import的区别详析
  • 604
分享到

TypeScript中import type与import的区别详析

2024-04-02 19:04:59 604人浏览 八月长安
摘要

目录背景import type vs import使用 import type 的好处参考链接总结背景 这周遇到了一个比较奇怪的问题:如何在 typescript 中根据某个 enu

背景

这周遇到了一个比较奇怪的问题:如何在 typescript 中根据某个 enum 的取值来执行后续逻辑?

按理来说应该很简单,这是 enum 的定义:

export enum MyEnum {
  DEFAULT = 0,
  SOME_VALUE = 1,
  SOME_OTHER_VALUE = 2,
}

然后在另一个项目中,通过 import type 来引入:

import type { MyEnum } from 'somepackage';

const someFunction = (myEnum: MyEnum) => {
  if (myEnum === MyEnum.SOME_VALUE) {
  	// some logic here
    return
  }
  if (myEnum === MyEnum.SOME_OTHER_VALUE) {
    // some logic here
    return
  }
  // some logic here
  return
}

但是这个时候 VS Code 居然提示了一个错误:

'MyEnum' cannot be used as a value because it was imported using 'import type'.ts(1361)

我的第一反应是,难道在 TypeScript 里不能检查 enum 的取值?这也太说不过去了吧…

后来折腾了半天,发现按照提示,把 import type 换成 import 就好了。

import type vs import

之前没有深入学习过 TypeScript,就是看项目里别人怎么用,就照猫画虎地写。

这次也是一样,别人都是 import type,我就直接在其中加了一个我想引入的 MyEnum,结果就不行了,还得把 MyEnum 分开来用 import。

但这是为什么呢?后来搜了一下,终于弄明白了。TypeScript 3.8 文档上说:

import type only imports declarations to be used for type annotations and declarations. It always gets fully erased, so there’s no remnant of it at runtime.

大概意思就是:import type 是用来协助进行类型检查和声明的,在运行时是完全不存在的。

这下终于明白上面 enum 的那个问题了:如果通过 import type 来引入 MyEnum,固然可以在构建时起到类型检查的作用,但在运行时 MyEnum 就不存在了,当然就无法检查 MyEnum.SOME_VALUE 之类的取值了!

可是仔细一想,TypeScript 本来就不应该在运行时存在呀!为什么还要用 import type 呢?

其实,在少部分情况下(刚好就包括 enum ),import 的内容在运行时的确是存在的,使用 import type 和import 就会有区别。

使用 import type 的好处

import type 是 TypeScript 3.8 才加入的,为什么要加入这个功能呢?使用 import type 而不是 import 有什么好处?

简单来说,大部分情况下用 import 完全就可以了,但在比较罕见的情况下,会遇到一些问题,这时候使用 import type 就可以解决问题了。

当然,我也没碰到过这样的问题,只不过项目里在所有引入 TypeScript 类型的地方用的基本都是 import type,也就跟着用了。这样当然是更保险一些,没啥坏处。

参考链接

Do I need to use the “import type” feature of TypeScript 3.8 if all of my imports are from my own file?

Runtime typesafety in typescript

总结

到此这篇关于TypeScript中import type与import区别的文章就介绍到这了,更多相关TS import type与import区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: TypeScript中import type与import的区别详析

本文链接: https://www.lsjlt.com/news/164279.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • TypeScript中import type与import的区别详析
    目录背景import type vs import使用 import type 的好处参考链接总结背景 这周遇到了一个比较奇怪的问题:如何在 TypeScript 中根据某个 enu...
    99+
    2022-11-13
  • python中import和from-import的区别解析
    目录. import导入模块的路径两种方式. import 模块名 和 from 模块名 import * 是不同的;.重新导入模块的方法import和from-import的显著区...
    99+
    2022-12-08
    python中import和from-import的区别 python中import from-import
  • python3中_from...import...与import ...之间的区别详解(包/模块)
    目录前言1.import ...2.from ... import ...3.引用也有区别4.引用优化总结前言 【以下说明以tkinter模块为例进行说明】 【下图为安装后在pyth...
    99+
    2022-11-11
  • 详解TypeScript中type与interface的区别
    目录类型别名 type接口 interfaceinterface和type的相似之处都可以描述 Object和FunctionTypeInterface二者都可以被继承interfa...
    99+
    2022-11-13
  • JS中Require与Import区别对比分析
    require 和 import对比区别 在 JavaScript 中,require 和 import 都是用来导入模块的。require 是 Node.js内置的方法,而 i...
    99+
    2023-03-02
    JS Require对比Import区别 Require Import区别
  • python中import和from-import的区别是什么
    本文小编为大家详细介绍“python中import和from-import的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“python中import和from-import的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-07-04
  • javascript中link与import方式的区别
    这篇文章主要讲解了“javascript中link与import方式的区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript中link与im...
    99+
    2022-10-19
  • JavaScript中require和import的区别详解
    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用requ...
    99+
    2022-11-13
  • css中link与@import区别有哪些
    这篇文章给大家分享的是有关css中link与@import区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。css的全称是什么css的全称是Cascading Style Sheets(层叠样式表),它是一...
    99+
    2023-06-08
  • CSS中import与link有哪些区别
    今天小编给大家分享一下CSS中import与link有哪些区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2022-10-19
  • JS中Require与Import区别是什么
    本篇内容主要讲解“JS中Require与Import区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中Require与Import区别是什么”吧!require 和 import对比...
    99+
    2023-07-05
  • CSS中import与link的区别是什么
    这篇文章主要介绍“CSS中import与link的区别是什么”,在日常操作中,相信很多人在CSS中import与link的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-19
  • css中link与import的区别有哪些
    这篇“css中link与import的区别有哪些”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“css中link与import的区别有哪些”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的...
    99+
    2023-06-06
  • CSS与HTML中link与@import的区别是什么
    本篇内容介绍了“CSS与HTML中link与@import的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2022-10-19
  • python中的import、fromimport及importas的区别解析
    首先介绍一下import和include的区别或者说import相对include的好处: import导入的内容只会被包含一次,在引入之前会检测是否已经存在该模块,不存在才会被引入...
    99+
    2022-11-11
  • js中关于require与import的区别及说明
    目录require和import的区别起源导出命令/引入命令静态优化(com)require和import,动态和静态require和import的区别问题动态引入和静态引入requ...
    99+
    2022-11-13
    js中require js中import require与import的区别
  • 详解Node中导入模块require和import的区别
    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使用mo...
    99+
    2022-06-04
    详解 模块 区别
  • CSS中link和@import的区别是什么
    CSS中link和@import的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。CSS中link和@import有什么区别?定义&n...
    99+
    2022-10-19
  • css中的link和@import有什么区别
    这篇文章给大家分享的是有关css中的link和@import有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   link和@import的区别:   1、从属关系区...
    99+
    2022-10-19
  • JavaScript中require和import的区别是什么
    本文小编为大家详细介绍“JavaScript中require和import的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript中require和import的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作