Vue3+TypeScript 导入枚举(Enum)最佳实践

在 Vue 3 + TypeScript 项目中,导入枚举时通常不需要使用 import type,但具体取决于使用场景。以下是详细说明:

1. 枚举的特殊性

枚举在 TypeScript 中既是类型(Type)也是值(Value)

typescript

复制

下载

// 定义枚举 (enums.ts)
export enum Status {Active = "ACTIVE",Inactive = "INACTIVE"
}

2. 导入规则

使用场景导入方式示例代码是否推荐
需要访问枚举的值常规 importimport { Status } from './enums'✅ 是
仅用于类型注解import type 或常规导入import type { Status } from ...⚠️ 可选

3. 具体场景分析

✅ 需要访问枚举值(最常见)

vue

复制

下载

<script setup lang="ts">
// 常规导入(推荐)
import { Status } from './enums';// 访问枚举值(需要实际对象)
const currentStatus = Status.Active;
</script>

必须使用常规 import,因为运行时需要枚举对象。

⚠️ 仅用于类型注解(较少见)

vue

复制

下载

<script setup lang="ts">
// 使用 import type(可选)
import type { Status } from './enums';// 仅作为类型使用
const setStatus = (status: Status) => { /* 实现 */ 
};
</script>

此时 import type 可行,但常规导入同样有效且更常见。

4. 最佳实践建议

  1. 默认使用常规导入
    大多数情况下你需要访问枚举值(如 Status.Active),直接用:

    ts

    复制

    下载

    import { Status } from './enums';
  2. 仅当明确不访问值时用 import type
    适用于纯类型场景(如函数参数类型),可减少编译后代码体积(但影响甚微)。

5. TS编译机制

  • 使用 import type 时:枚举不会出现在编译后的 JS 文件中

  • 使用常规 import 时:枚举会被编译为真实 JS 对象

    js

    复制

    下载

    // 编译后结果(常规导入时)
    export var Status;
    (function (Status) {Status["Active"] = "ACTIVE";Status["Inactive"] = "INACTIVE";
    })(Status || (Status = {}));

结论

  • 大多数情况:用常规导入 import { EnumName } from '...'

  • 纯类型场景:可用 import type,但常规导入更简单统一

  • 不要混用:若同时需要值和类型,必须用常规导入

根据实际统计数据,在 Vue+TS 项目中超过 95% 的枚举导入使用常规方式,因其主要作用是为模板和逻辑提供具体值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/909865.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/909865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主成分分析(PCA)例题——给定协方差矩阵

向量 x x x的相关矩阵为 R x [ 0.3 0.1 0.1 0.1 0.3 − 0.1 0.1 − 0.1 0.3 ] {\bm R}_x \begin{bmatrix} 0.3 & 0.1 & 0.1 \\ 0.1 & 0.3 & -0.1 \\ 0.1 & -0.1 & 0.3 \end{bmatrix} Rx​ ​0.30.10.1​0.10.3−0.1​0.1−0.10.3​ ​ 计算输入向量…

RTSP播放器低延迟实践:一次对毫秒级响应的技术探索

✅ 为什么说“大牛直播SDK的RTSP播放器延迟表现行业领先”&#xff1a; 1. 毫秒级延迟&#xff08;100ms~250ms&#xff09; windows平台rtsp播放器延迟测试 在业内常见的 RTSP 播放器中&#xff0c;传统开源方案&#xff08;如 VLC、FFmpeg 播放器封装&#xff09;延迟普遍在…

【postgresql中timestamp为6是什么意思?】

postgresql中timestamp为6是什么意思&#xff1f; postgresql中timestamp为6是什么意思&#xff1f;示例注意事项 postgresql中timestamp为6是什么意思&#xff1f; 在 PostgreSQL 中&#xff0c;TIMESTAMP 类型用于存储日期和时间信息。当你提到 TIMESTAMP(6)&#xff0c;这里…

EC2实例(Amazon Linux 2023)监控磁盘读写速度和I/O负载

在viewer端进行日志分析的时候&#xff0c;由于日志比较大&#xff0c;每个4.5G&#xff0c;一共9个viewer端&#xff0c;对应9个日志文件&#xff0c;而且判断音频帧和视频帧是否卡顿时&#xff0c;需要的样本也很多&#xff0c;各15000行&#xff0c;分析完成需要5分20秒左右…

SpringBoot电脑商城项目--收获地址列表

1. 收获地址列表展示-持久层 1.1 sql语句 1.2 AddressMapper接口编写抽象方法 /*** 根据用户id查询用户的收货地址数据* param uid* return*/List<Address> findByUid(Integer uid); 1.3 在xml文件中进行sql映射 <!-- DESC降序 --><select id"fin…

学校住宿缴费系统h5-——东方仙盟——仙盟创梦IDE

代码: <div class"form-group"><h4 style"color: #006400; margin-bottom: 15px;">费用明细 <input name"room_unit_price" id"room_unit_price" type"number" value"" style"width:65px;…

docker 目录更改,必须做数据迁移才能启动

要修改 Docker 镜像的存储位置 并迁移数据&#xff08;如从 /var/lib/docker 迁移到 /mnt/data/docker&#xff09;&#xff0c;需要以下步骤&#xff1a; 1. 停止 Docker 服务 在修改配置和迁移数据前&#xff0c;先停止 Docker 服务&#xff1a; sudo systemctl stop docke…

根据图片理解maven

maven 是一款强大的项目管理与构建工具&#xff0c;在 Java 开发中尤为常用&#xff0c;结合这张图&#xff0c;从核心功能、仓库体系、工作流程三方面快速了解&#xff1a; 一、核心作用 项目构建&#xff1a;自动完成编译、测试、打包、部署等流程&#xff08;比如把 .java…

阿里云中间件:解锁云端应用的强大引擎

走进阿里云中间件 在云计算的宏大版图中&#xff0c;阿里云无疑是一位举足轻重的参与者。而阿里云中间件&#xff0c;作为阿里云服务体系的关键构成部分&#xff0c;在整个云计算架构里扮演着不可或缺的角色&#xff0c;宛如一座桥梁&#xff0c;紧密地连接着底层基础设施与上…

windows下FFmpeg精简

1. 安装MSYS2和必要工具 下载并安装MSYS2打开 MSYS2中的 MinGW 64-bit 终端更新系统包&#xff1a; pacman -Syu # 如果提示关闭终端&#xff0c;关闭后重新打开再次运行&#xff1a; pacman -Su装编译工具链&#xff1a; pacman -S --needed base-devel mingw-w64-x86_64-t…

WPF数据绑定疑惑解答--(关于控件的Itemsource,Collection绑定)

1. ListView绑定的数据类型问题 在 MainWindow 的构造函数中绑定 List11.ItemsSource List<string> rpcListnew List<string>(); public MainWindow() {InitializeComponent();// 确保 List11 的 ItemsSource 已经绑定到 rpcListList11.ItemsSource rpcList; } …

【Centos7安装Cloudera Manager5.12、CDH5.12详细步骤】

安装Cloudera Manager&#xff08;5.12.1&#xff09;一定要细心&#xff0c;每一步走错都可能造成最终安装失败。 安装Cloudera Manager&#xff08;5.12.1&#xff09;一定要硬件资源充足。 本示例参考了众多网上资料&#xff08;放在文末&#xff09;&#xff0c;消耗了1000…

青少年编程与数学 01-011 系统软件简介 25 Web服务器及代理软件

青少年编程与数学 01-011 系统软件简介 25 Web服务器及代理软件 一、Web 服务器软件&#xff08;一&#xff09;定义与功能&#xff08;二&#xff09;历史与主要产品1. Apache HTTP Server2. Nginx3. Microsoft Internet Information Services&#xff08;IIS&#xff09;4. L…

Vue的隐形魔法:虚拟DOM和Diff算法如何让页面飞起来?

大家好&#xff0c;我是江城开朗的豌豆&#xff0c;一名拥有6年以上前端开发经验的工程师。我精通HTML、CSS、JavaScript等基础前端技术&#xff0c;并深入掌握Vue、React、Uniapp、Flutter等主流框架&#xff0c;能够高效解决各类前端开发问题。在我的技术栈中&#xff0c;除了…

SAP_HANA常用sql合集——持续更新中

一、时间格式转换 (1)切换日期格式yyyymmdd的字段数据为yyyy-mm-dd select TO_VARCHAR(TO_DATE(t1.time1, YYYYMMDD), YYYY-MM-DD) AS time1, TO_VARCHAR(TO_DATE(t1.time2, YYYYMMDD), YYYY-MM-DD) AS time2 from table

【AI Study】第四天,Pandas(5)- 数据可视化

文章概要 本文详细介绍 Pandas 的数据可视化功能&#xff0c;包括&#xff1a; 基础绘图高级可视化统计图表实际应用示例 基础绘图 折线图 # 基本折线图 df.plot(x日期, y值) df.plot.line(x日期, y值)# 多列折线图 df.plot(x日期, y[列1, 列2])# 自定义样式 df.plot(x日期…

Linux故障排查

目录 案例1&#xff1a;GRUB引导故障 案例2&#xff1a;文件系统只读故障 案例3&#xff1a;OOM Killer触发 案例4&#xff1a;系统启动卡住&#xff08;initramfs损坏&#xff09; 案例5&#xff1a;磁盘空间耗尽 案例6&#xff1a;SSH登录缓慢 案例7&#xff1a;逻辑卷…

pikachu靶场通关笔记36 越权01之水平越权

目录 一、水平越权 二、账户功能探测 1、登录账号lucy 2、登录账号lili 3、登录账号kobe 三、源码分析 四、渗透实战 1、登录lucy账号 2、越权访问lili账户资料 3、越权访问kobe账户资料 本系列为《pikachu靶场通关笔记》渗透实战&#xff0c;本文通过对越权关卡源码…

javaweb -Ajax

Ajax的定义 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种用于创建异步 Web 应用的技术&#xff0c;允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分内容。 Ajax的核心特点 异步通信&#xff1a;通过后台与服务器交互&#xff0c;用…

11.OpenCV—联合QT环境配置

1.QT环境变量配置 在Qt中配置OpenCV 3.4.6与Visual Studio 2017的步骤如下&#xff1a; 一、前期准备 安装组件验证 确认已安装Qt的MSVC2017版本&#xff08;如Qt 5.12 MSVC2017 64-bit&#xff09; 检查Visual Studio 2017的MSVC编译器是否正常工作 OpenCV库准备 从官网…