<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這周遇到了一個比較奇怪的問題:如何在 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 就好了。
之前沒有深入學習過 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 是 TypeScript 3.8 才加入的,為什麼要加入這個功能呢?使用 import type 而不是 import 有什麼好處?
簡單來說,大部分情況下用 import 完全就可以了,但在比較罕見的情況下,會遇到一些問題,這時候使用 import type 就可以解決問題了。
當然,我也沒碰到過這樣的問題,只不過專案裡在所有引入 TypeScript 型別的地方用的基本都是 import type,也就跟著用了。這樣當然是更保險一些,沒啥壞處。
Runtime typesafety in typescript
到此這篇關於TypeScript中import type與import區別的文章就介紹到這了,更多相關TS import type與import區別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45