TS枚举的个人写法

协程星云
• 阅读 131

TS中可以使用enum或者const enum声明枚举,应该都知道就不说了。这个写法有一个问题,就是必须导入才能使用。在类型本身其实并不需要导入的情况下,由于引用了枚举导致类型也需要导入,且由此派生的都需要导入,比如下面这样,作为强迫症就很难忍了。

/** xx.ts **/
export enum DemoEnum {
  Hello
}

/** typings.d.ts **/
import {Hello} from 'xx';
interface Demo {
  hello: Hello;
}

/** otherTypings.d.ts **/
import {Demo} from 'typings';
interface Demo2 extend Demo {
    other: any;
}

反正我是宁可多些点代码也不希望看到多余的引用的,所以就有了现在这个写法。目的就是把类型和常量分离,这样所有的d.ts文件中就不会出现import了。

/** typings.d.ts **/
declare module Demo {
  type Hello = 'Hello';
  type World = 'World';
  type DemoEnum = Hello | World;
  
  interface Demo {
    demo: DemoEnum;
  }
}
/** constants.ts **/
const DemoEnum: {Hello: Demo.Hello; World: Demo.World} = {Hello: 'Hello', World: 'World'};
export const DemoConstants = {
  DemoEnum,
}

如果你有更好的办法请告诉我哈,不胜感激。

点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
4年前
一篇文章带你使用Typescript封装一个Vue组件
搭建项目以及初始化配置vue create tsvuebtn这里使用了vueCLI3自定义选择的服务,我选择了ts、stylus等工具。然后创建完项目之后,进入项目。使用快捷命令code.进入Vscode编辑器(如果没有code.,需要将编辑器的「bin文件目录地址」放到环境变量的path中)。然后,我进入编辑器之后,进入设置工作区,随便设置一个
Wesley13 Wesley13
3年前
java面试 (六)
1 String.split(Stringregex),传入的参数是正则表达式,有一些特殊字符(比如.\\()\\|等)需要转义。2 关于枚举类型,一般用作常量,理想情况下,枚举中的属性字段是私有的,并在私有构造函数中赋值,没有对应的Setter方法,最好加上final修饰符。publicenumPer
lucien-ma lucien-ma
4年前
Java 实用类
实用类枚举MathRandomStringStringBuffer日期类枚举枚举(Enum)是一种有确定取值区间的数据类型,它本质上是一种类,具有简洁、安全、方便等特点。可以这样理解,枚举的值被约束到一个特定的范围,只能取这个范围以内的值。我们为什么要用枚举呢?我们在描述对象的一些属性特征时,可选择的值是一个特定范围的,不能随便定义。比如性别只
Easter79 Easter79
3年前
Swift讲解专题九——枚举
Swift讲解专题九——枚举一、引言      在ObjectiveC语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据。二、枚举语法      Swift中enum关
Wesley13 Wesley13
3年前
Java枚举的小知识点
enum是jdk1.5引入的,使用它可以创建枚举类型,就像使用class创建类一样。enum关键字创建的枚举类型默认是java.lang.Enum(一个抽象类)的子类用法1常量一般定义常量都是publicstaticfinal…,现在可以把相关常量都放在一个枚举类里,而且枚举比常量提供更多方法1.enumsea
Wesley13 Wesley13
3年前
mysql8基于gtid导出导入搭建主从
mysql8基于gtid导出导入搭建主从开启GTID的情况下导出导入库的注意事项在开启了GTID功能的MySQL数据库中,不论是否使用了GTID的方式做了主从同步,导出导入时都需要特别注意数据库中的GTID信息.\导出\在主库上全备,setgtidpur
Wesley13 Wesley13
3年前
Java 日期与时间
Java的日期Java没有内置的日期类,但可以导入java.time包,这个包中包含了许多类,可用于处理日期和时间。例如:<table<tbody<tr<thstyle"width:25%"Java类</th<thstyle"width:75%"描述</th</tr<tr<td<code
黄忠 黄忠
2年前
Vue3.3 + TS4 ,自主打造媲美 ElementPlus 的组件库一起学习
Vue3.3TS4,自主打造媲美ElementPlus的组件库download:https://www.sisuoit.com/4186.html1、宏中的导入类型和复杂类型以前,在和的类型参数位置中使用的类型仅限于本地类型,并且仅支持类型文本和接口。这
API 小达人 API 小达人
1年前
Eolink Apikit 版本更新:数据字典功能上线、支持 MongoDB 数据库操作...
EolinkApikit版本更新:搭建自定义接口协议架构,支持快速适配金融行业各类型私有协议的导入、编辑和展示。数据字典功能上线,支持以数据字典的形式管理参数枚举值。数据库连接支持MongoDB数据库操作。基于Apikit类型导入API数据支持增量更新......
小万哥 小万哥
1年前
C 语言中布尔值的用法和案例解析
C语言中的布尔值在编程中,您经常需要一种只能有两个值的数据类型,例如:是/否开/关真/假为此,C语言有一个bool数据类型,称为布尔值。布尔变量在C语言中,bool类型不是内置数据类型,例如int或char它是在C99中引入的,您必须导入以下头文件才能使用
协程星云
协程星云
Lv1
海上生明月,天涯共此时。
文章
3
粉丝
0
获赞
0