首页
学习
活动
专区
圈层
工具
发布

一站式解决使用枚举的各种痛点

如果变量值仅有有限的可选值,那么用枚举类来定义常量是一个很常规的操作。 但是在业务代码中,我们不希望依赖 ordinary() 进行业务运算,而是自定义数字属性,避免枚举值的增减调序造成影响。...为例,我们希望达到的效果是: 前端传参时给我们枚举的 index 值,在 controller 中,我们可以直接使用 CourseType 来接收,由框架负责完成 index 到 CourseType...@JsonValue:在序列化时,只序列化 @JsonValue 注解标注的值 @JsonCreator:在反序列化时,调用 @JsonCreator 标注的构造器或者工厂方法来创建对象 最后的代码如下...现在大部分的代码都在使用 swagger 来编写文档,不知道大家有没有这样的痛点: 在编写文档时,需要告诉前端枚举类型有哪些取值,每次增加取值之后,不仅要改代码,还要找到对应的取值在哪里使用了,然后修改...反正小黑我觉得这样做很不爽,那有没有什么办法可以让 swagger 框架来帮我们自动列举出所有的枚举数值呢?办法当然是有的啦!

2.1K20

编写高质量可维护的代码:Awesome TypeScript

接下去,本文将给大家分享下,TypeScript 的重要特性以及在实际场景中的使用技巧,帮助大家更高效的编写高质量可维护的代码。...下面选择几个 TypeScript 特有的类型进行详解: Enum 枚举:在编码过程中,要避免使用硬编码,如果某个常量是可以被一一列举出来的,那么就建议使用枚举类型来定义,可以让代码更易维护。...类型注解 TypeScript 通过类型注解提供编译时的静态类型检查,可以在编译阶段就发现潜在 Bug,同时让编码过程中的提示也更智能。使用方式很简单,在 : 冒号后面注明变量的类型即可。...和 setter 通过 getter 和 setter 方法来实现数据的封装和有效性校验,防止出现异常数据。...以下示例中,工厂函数构造出来的是 T 类型的对象。

3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一杯茶的时间入门Vue新的状态管理库Pinia

    现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 linwu的算法笔记 Pinia 是 Vue.js 官方推荐的新一代状态管理库,它提供了非常简洁和直观的 API,...Action,统一使用 Actions 操作状态 支持 TypeScript,可以充分利用 TS 的静态类型系统 模块化管理 States,每个模块是一个 Store 直观的 Devtools,可以看到每个...setStorage 函数:将提供的值转换为 JSON 格式,并以指定的 key 保存到本地存储中。 DEFAULT_KEY 常量:表示默认的本地存储键名前缀。...如果在选项中未提供自定义键名,将使用该默认键名。...Options 类型:定义了插件选项对象的类型,包含 key(本地存储键名前缀)和 needKeepIds(需要进行持久化的 Pinia 存储的 ID 数组)两个可选属性。

    69530

    TypeScript 4.0正式发布!现在是开始使用它的最佳时机

    它的基本理念是,记下值的类型以及它们的使用位置后,可以使用 TypeScript 对代码进行类型检查,并在运行代码之前(甚至在保存文件之前)告诉你代码错误的相关信息。...除了类型检查之外,TypeScript 还使用静态类型来支持强大的编辑器工具,例如自动完成、代码导航、重构等。...对于 concat,我们在较旧版本的 TS 中唯一可以做的就是尝试编写一些重载。...在第一个示例中,我们没有第一个和第二个元素的参数名称。尽管这些对类型检查没有影响,但元组位置上缺少标记会难以传达我们的意图。因此,在 TypeScript 4.0 中,元组类型现在可以提供标记。...属性重写访问器(反之亦然)是错误 以前,只有在使用 useDefineForClassFields 时,属性重写访问器或访问器重写属性是一个错误;但现在,在派生类中声明一个将重写基类中的 getter

    2.9K10

    从零到一:一个Java全栈工程师的实战面试经历

    **应聘者**:是的,我可以考虑使用工厂模式来创建不同租户下的用户实例,或者使用策略模式来处理不同的租户规则。...**应聘者**:对于简单的查询,我会直接使用JPA的CRUD方法。对于复杂的查询,我会使用`@Query`注解来编写自定义SQL语句,或者使用Criteria API进行动态查询。...**应聘者**:我主要使用Vue.js,特别是Vue3。我还熟悉Element Plus和Ant Design Vue这些UI组件库。 **面试官**:那你有没有使用过TypeScript?...**应聘者**:是的,我在一个项目中将Vue2迁移到Vue3并引入了TypeScript,这帮助我们提高了类型安全性和代码可维护性。 **面试官**:那你是如何组织前端代码的?...**应聘者**:是的,我们使用Docker来打包应用,并通过Kubernetes进行编排和管理。 ## 第七轮:测试与调试 **面试官**:你有没有使用过单元测试?

    19810

    TypeScript 4.0 RC发布,带来诸多更新

    对于 concat,我们在较旧版本的 TS 中唯一可以做的就是尝试编写一些重载。...在第一个示例中,我们没有第一个和第二个元素的参数名称。尽管这些对类型检查没有影响,但元组位置上缺少标记会难以传达我们的意图。因此,在 TypeScript 4.0 中,元组类型现在可以提供标记。...TypeScript 4.0 在转换常见模式时可以利用可选链和空值合并的优势! 我们认为这种重构应该能捕获大多数用例的意图,尤其是当 TypeScript 对你的类型有更精确的了解时。...但是,自动导入在用 TypeScript 编写的包上不起作用——也就是说,我们得在项目的其他位置至少写了一个显式导入。 为什么自动导入适用于 @types 软件包,而不适用于使用自己类型的包呢?...属性重写访问器(反之亦然)是错误 以前,只有在使用 useDefineForClassFields 时,属性重写访问器或访问器重写属性是一个错误;但现在,在派生类中声明一个将重写基类中的 getter

    3.1K20

    TypeScript 4.3 beta 版本正式发布:新增import语句补全,对模板字符串类型进行改进

    下面我们就来深入了解 TypeScript 4.3 带来的新内容吧! 属性上的单独写入类型 在 JavaScript 中,API 在存储之前转换传入的值是很常见的。...这在 getter 和 setter 中也时常遇到。例如,假设我们有一个带有 setter 的类,其总是将值转换为一个 number,然后再保存在一个私有字段中。...请记住,这种模式并不只局限在类上。你可以在对象常量中编写具有不同类型的 getter 和 setter。...,那就是读属性的类型必须可分配给你正在编写的类型,换句话说,getter 类型必须可以分配给 setter。...在 TypeScript 4.3 中,如果将具有一个联合 enum 类型的值与一个不可能相等的数字字面量进行比较,则类型检查器将发出错误。

    1.4K40

    一统江湖的大前端(10)——inversify.js控制反转

    手动实现IOC容器 下面我们使用Typescript来手动实现一个简单的IOC容器类,你可以先体会一下它的基本用法,因为强类型的特点,它更容易帮助你在抽象层面了解自己所写的代码,另外它的面向对象特性也更加完备...2个接口和1个类,IOC容器类中有一个私有的map实例,它的键是PropertyKey类型,这是Typescript中预设的类型,指string | number | symbol的联合类型,也就我们平时用作键的类型...,而值的类型是iIOCMember,从接口的定义中可以看到,它需要一个工厂方法、一个标记是否为单例的属性以及指向单例的指针,接下来我们在IOC容器类上添加用于注册构造函数的方法bind: // 构造函数泛型...“推断注入”属于一种隐式推断的方式,它要求形参的名称和模块注册时使用的键名保持一致,例如前文示例中的userService对应着使用app.service方法所定义的userService服务。...,如果使用Typescript,开发者就可以通过配置tsconfig.json中的参数来启用装饰器(在Spring框架中被称为annotation,也就是注解)语法来实现相关的逻辑,它的本质只是一种语法糖

    3.9K30

    用Hardhat和Ethers引入并测试知名NFT智能合约

    但是现在让我们以手动方式进行,如何使用代码来更有效的获取合约代码,可以作为一个练习题 :) 就要完成了第 1 步 - 复制合约代码并将其保存在文件中 - 现在你可以将其放在记事本中或将其保存在某个文件中...首先,安装 TypeScript 和一些类型: npm i -D ts-node typescript @types/node @types/chai @types/mocha 然后我们将hardhat.config.js...TypeScript,在“beforeEach”中为我们的变量导入了类型,并添加了一个“owner”和“address1”变量,可以在需要地址的测试用例中使用。...让我们为该函数编写一个测试,这将让我们尝试支付,并迫使我们使用合约中的其他一些方法来使测试通过。...最后,tokenId 在 mintApe 方法的 for 循环中定义,并设置为 tokenSupply getter 的返回值。

    1.7K30

    前端开发者的 Kotlin 之旅:快速入门

    工厂模式 在工厂模式中,TypeScript 既可以通过工厂函数创建对象,也可以在类中使用静态函数来实现类似功能。...每次name属性的值发生变化时,都会执行NameDelegate类中的setValue逻辑,打印旧值和新值。..._name = value; } } 在 TypeScript 中,虽然没有直接的属性委托机制,但可以通过定义getter和setter方法来实现类似的功能。...每次设置name属性时,都会执行setter方法中的逻辑,打印旧值和新值。 2. 类委托 类委托允许一个类将其部分或全部接口实现委托给另一个类。在 Kotlin 中,这可以通过by关键字轻松实现。...密封类与联合类型 在 TypeScript 中,我们使用联合类型来处理多种可能的类型组合。

    63000

    全新 Javascript 装饰器实战上篇:用 MobX 的方式打开 Vue

    解决办法是将对应的类实例和组件的生命周期绑定。...更容易测试 另外 Typescript 针对新的装饰器也提供了更严格的类型检查,比如可以约束装饰器使用的位置,旧版可以使用在任意位置,只能通过运行时进行检查。...属性装饰器的返回值是一个函数,这个实际上就是一个 initializer 访问不到类和类的原型 在 initializer 中也不能调用 defineProperty。...邪恶的副作用… 主要原因是上述代码我们在 addInitializer 中引用的 ‘value’ 是类原始的 getter 值,而我们又重新用 defineProperty 覆盖了属性,导致 @log...实际上在新版的装饰器中,更符合规范的用法是:返回新的值来替换旧的值 const COMPUTED_CACHE: unique symbol = Symbol('computed_cache') export

    93220

    【愚公系列】《鸿蒙原生应用开发从零基础到多实战》005-TypeScript 中的枚举

    前言 在现代编程中,枚举是一种非常实用的类型,它可以帮助我们管理和组织一组相关的常量,使代码更加清晰和易于维护。...TypeScript作为一种静态类型语言,提供了对枚举的强大支持,使得开发者能够更有效地定义和使用常量集合。...在鸿蒙原生应用开发中,掌握TypeScript中的枚举,不仅可以提升代码的可读性,还能减少出错的可能性。...本篇文章将深入探讨TypeScript中的枚举类型,包括数字枚举、字符串枚举以及异构枚举的使用方法。...2.枚举与数组/对象的对比 特性 数组 对象 枚举 访问方式 仅通过索引 (arr[0]) 键名 (obj.key) 双向访问(键名或值) 值类型 任意类型 任意类型 数字、字符串或混合类型 自动编号

    25200

    TypeScript系列教程十一《装饰器》 -- 属性装饰器

    系列教程九《类型转换》-- keyof和typeof 操作 TypeScript系列教程九《类型转换》-- 索引访问类型 TypeScript系列教程九《类型转换》-- 条件类型 TypeScript系列教程九...《类型转换》-- 映射类型 TypeScript系列教程九《类型转换》-- 条件类型 TypeScript系列教程九《类型转换》-- 模板文本类型 TypeScript系列教程十《模块》 TypeScript...– reflect-metadata TypeScript系列教程十一《装饰器》 – 属性装饰器 TypeScript系列教程十一《装饰器》 – 参数装饰器 属性装饰器和其他装饰器功能类似,其设计也是为了统一的...属性装饰器声明在一个属性声明之前(紧靠着属性声明)。 属性装饰器不能用在声明文件中(.d.ts),或者任何外部上下文(比如 declare的类)里。...因为目前没有办法在定义一个原型对象的成员时描述一个实例属性,并且没办法监视或修改一个属性的初始化方法。返回值也会被忽略。因此,属性描述符只能用来监视类中是否声明了某个名字的属性。

    1.5K20

    淘宝店铺 TypeScript 研发规约落地实践|技术详解

    类型守卫 其实,更理想的做法是使用类型守卫,通过实际层面的逻辑判断,比如是否包含某个字段,某个字段是否是正确类型,结合 TypeScript 的 is 关键字来在实际使用时去精确地收窄类型。...我们想复制一个接口,然后对它的键值类型做操作是很容易的,用索引类型、映射类型就行,但如果我们期望的生成接口在键名上也需要做变更,就没办法了,只能重新声明。...而有了重映射之后,我们可以将原键名映射到一个新的,基于模板字面量类型修改过的键名。这里只给了一个简单的示例,实际上你还可以做到更进一步的映射,如基于键值的实际类型来对键名进行不同的修改。...ESLint、TSConfig 规则集 我们最终使用的规则集可以简单拆解成这么几个部分,首先是对于多种语法的统一,TypeScript 中可以使用 as 和尖括号来进行类型断言,as 看起来更清晰,尤其是与泛型一同使用...同时由于 TypeScript 中的上下文类型推导能力,在声明返回值类型后,函数内部的 return 语句会自动被推导为此类型。

    1.5K20

    typescript基础一览,助你从入门到放弃!

    我们发现当我们声明赋值以后,编辑器会自动推断出一个类型,在以后再赋值时,act的类型就被锁死 类的相关 在ts中类的定义和继承是和es6基本一致,只不过在此基础上加上了一些类型注解 1、类的定义 class...使用super super.eat()//如此就能拿到父类的方法了 }; } 复制代码 ** 4、类的访问类型** 类中的属性和方法有四种访问类型 public 允许我在类的内外被调用...(这是默认的访问类型) private 允许在类内被使用 protected 允许在类内及继承的子类中使用 5、类的getter和setter 由于在js中,getter 和setter不能直接使用,我们需要通过一个...如果在ts中用js文件怎么办 如果,由于我们的ts语言有着大量的类型注解,但是在实际的开发中,我们的ts文件需要引入一些,js的库供我们使用,此时,静态类型检查就会报错,以jq来举例,我们如果引入jq...,所以我们必须用as来给他类型断言,但是这种写法相当的不优雅,我们可以用装饰器封装一个工厂模式来解决 //工厂封装retrun一个真正的装饰器 function lol(){ //new的意思表示这个这是一个构造函数

    1.1K10

    Vue3 + TypeScript 开发实践总结

    局限性 随着组件与组件依赖之间不断变大,组件很难读取和维护 没有完美的方法解决跨组件代码重用 2.2 Vue 3 如何解决Vue 2 局限 组件难以维护管理 【在Vue3 中 编写组合函数,使用 Compositon...Api 来编写组件,它只是在Vue3 中编写组件中的另一种方法,内部简化了好多操作。...所以你还可以继续使用 Vue2 的方式来 编写 组件。...中还可以返回方法 在 setup 中 访问 定义的变量值,不能直接通过变量名来获取,必须通过 变量名.value 来获取到该对象 、 值 这样的好处 状态好管理,可以划分好几个 setup 状态管理...在 Vue 2 中,我们可以使用 Provide/Inject 跨组件传值,在 Vue 3 中也可以。

    1.1K10

    Java全栈开发工程师的面试实战:从基础到高阶的技术问答

    ## 面试官:那你有没有实际使用过G1?在什么场景下选择它? **应聘者**:是的,我在一个电商平台项目中用到了G1。...你熟悉Vue3和TypeScript,能说说Vue3中的响应式系统是怎么实现的吗? **应聘者**:Vue3的响应式系统基于Proxy和Reflect实现。...那你在项目中是如何结合TypeScript进行类型校验的? **应聘者**:我们在项目中使用TypeScript来定义组件的props和state,这样可以在编译阶段就发现潜在的类型错误。...## 面试官:那你有没有遇到过TypeScript类型推断不准确的情况?如何解决的? **应聘者**:确实遇到过。比如在某些动态数据的情况下,TypeScript无法准确推断出变量类型。...这时候我们会手动添加类型注解,或者使用类型断言来明确变量类型。 ## 面试官:明白了。那我们来看看你的数据库知识。你用过MyBatis和Spring Data JPA,这两个框架有什么区别?

    13510

    采用现代Objective-C

    虽然核心理念和实践保持不变, 但语言中的部分内容经历了重大的变化和改进。现代化的Objective-C在类型安全、 内存管理、性能、和其他方面都得到了增强。使你更容易编写正确的代码。...---- 在你的代码中,出现id作为返回值替换为instancetype在适当的地方。这通常是init方法和类的工厂方法。...---- 请注意,您仅应该用instancetype替换id作为返回值,而不是在你的代码的任何地方都这么做。不像id,instancetype在 声明方法时仅仅只能作为返回值类型使用。...Properties提供一个 安全、方便的方式来定义这些属性,而无需编写一组自定义访问器方法(虽然属性允许定制的getter和setter,如果需要的话)。...这些宏在Xcode中实现可以显式地指定枚举类型和选项的大小。此外,这种由旧的编译器语法声明枚举的方式,可以被新的编译器正确评估和解释潜在的类型信息。

    91330
    领券